【问题标题】:Laravel - disable hashing on attempt methodLaravel - 在尝试方法上禁用散列
【发布时间】:2020-08-18 22:51:06
【问题描述】:

所以,我遇到的问题如下:

我有这个登录方法。问题是电子邮件和密码在外部数据库中。密码已经以我无法更改的特定方式进行了哈希处理,并且由于尝试方法对请求中给出的密码进行哈希处理以将其与数据库进行比较,因此它总是会失败,因为哈希算法不同。我可以禁用自动散列吗?以在其他外部数据库中完成的方式进行?

public function login(Request $request)
{
    //Validating the request body
    $validator = Validator::make($request->all(), [
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if($validator->fails()){
        return response()->json($validator->errors()->first(), 400);
    }

    $credentials = $request->only('email', 'password');

    if ($token = $this->guard()->attempt($credentials)) {
        return $this->respondWithToken($token);
    }

    return response()->json('Invalid email or password', 401);
}

【问题讨论】:

标签: laravel


【解决方案1】:

我认为你有两个选择。

  1. 您可以在config/hashing.php 中创建和覆盖哈希驱动程序
  2. 您在LoginController 中编写了一些自定义身份验证逻辑

我认为更简单的方法是 2。但长期使用您可能会考虑选项 1。

通常你会像这样进行身份验证:

     /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }

https://laravel.com/docs/7.x/authentication#authenticating-users

在您的情况下,您需要用一些代码替换 if 部分,以便在数据库中查找用户和自定义散列密码。

【讨论】:

  • 但在这种情况下,不会生成令牌,我需要它。尝试方法生成令牌。
  • @MarcoSilva 你可以用Auth::login($user) 代替吗?
  • stackoverflow.com/questions/17710897/… 也许这样的东西可以工作?
  • Auth::login($user) 不起作用。另一个链接我认为它会很有用,但我需要更好地检查它。谢谢。
【解决方案2】:

你想使用另一个 laravel 项目的登录?

不是最聪明的方法,但可能会奏效。

  1. 使app.key 在两个项目中相等。
  2. 创建一个database.connections 另一个与第一个项目的连接。例如将其命名为auth_mysql
  3. 修改app/User.php并添加protected $connection = 'auth_mysql';

如果您想要对 users 表执行 JOINS,这可能会导致问题。

完美的解决方案是使用 https://laravel.com/docs/7.x/passport#installation 进行完整的 OAUTH

【讨论】:

  • 我想做一个需要登录的 laravel + react 应用。但不需要注册。注册用户在其他数据库中,我只能获取值,并且密码在那里以特定方式散列。尝试方法 bcrypt 请求中的密码以将其与数据库进行比较,但它总是会失败,因为保存在另一个数据库中的密码不使用 bcrypt 对其进行哈希处理。
猜你喜欢
  • 2012-10-24
  • 2018-04-14
  • 1970-01-01
  • 2020-11-07
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多