Laravel-禁用尝试哈希方法



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

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

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);
}

我认为您有两种选择。

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

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

通常你会这样做身份验证:

/**
* Handle an authentication attempt.
*
* @param  IlluminateHttpRequest $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-用户

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

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

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

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

如果要对users表执行JOIN操作,这可能会导致问题。

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

最新更新