所以,我遇到的问题如下:
我有这种登录方法。问题是电子邮件和密码在外部数据库中。密码已经以我无法更改的特定方式进行了哈希处理,由于尝试方法对请求中给定的密码进行哈希处理,以将其与数据库密码进行比较,因此它总是会失败,因为哈希算法不相同。我可以禁用自动哈希吗?以其他外部数据库中的方式进行?
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);
}
我认为您有两种选择。
- 您可以在
config/hashing.php
中创建和覆盖哈希驱动程序 - 在
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的另一个项目的登录吗?
这不是最聪明的方法,但可能会奏效。
- 在两个项目上使
app.key
相等 - 创建一个
database.connections
到第一个项目的另一个连接。例如,将其命名为auth_mysql
- 修改
app/User.php
并添加protected $connection = 'auth_mysql';
如果要对users
表执行JOIN操作,这可能会导致问题。
完美的解决方案是用https://laravel.com/docs/7.x/passport#installation