【发布时间】:2020-07-25 17:50:42
【问题描述】:
我想登录时遇到了一些问题,我的Auth::attempt 总是错误的值有问题,我的代码有问题吗?
控制器:
public function register(Request $register)
{
$validator = Validator::make($register->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 401);
} else {
$name = $register->input('name');
$email = $register->input('email');
$pwd = $register->input('password');
$c_pwd = $register->input('c_password');
// Crypting password & c_password to md5
$md5_pwd = md5($pwd);
$md5_c_pwd = md5($c_pwd);
// Salt password & c_password
$password = crypt($md5_pwd, "asd");
$c_password = crypt($md5_c_pwd, "asd");
$data = new User();
if ($password == $c_password) {
$user = User::create([
'name' => $name,
'email' => $email,
'password' => $password,
]);
$success['token'] = $user->createToken('SSOApp')->accessToken;
return response()->json([
'success' => true,
'token' => $success,
'user' => $user
]);
} else {
return response()->json(['error' => "Password doesn't match"], 401);
}
}
}
public function login()
{
$email = request('email');
$pwd = request('password');
$md5 = md5($pwd);
$password = crypt($md5, "asd");
if (Auth::attempt(['email' => $email, 'password' => $password])) {
$user = Auth::user();
$success['token'] = $user->createToken('SSOApp')->accessToken;
return response()->json([
'success' => true,
'token' => $success,
'user' => $user
]);
} else {
return response()->json([
'success' => false,
'message' => 'Invalid Email or Password',
], 401);
}
}
【问题讨论】:
-
不推荐使用 md5() 而不是 bcrypt()。和 Auth::attempt 使用 bcrypt 检查用户密码。
-
那么我必须为我的 md5() 和 bcrypt() 使用方法做什么?
-
尽可能不要使用自己的加密。在保存用户密码的同时调用 Hash::make('string') 使用 laravel 默认 bcrypt()。
-
所以只使用 bcrypt 的默认方法?无法使用其他方法?
-
您可以通过在 config/hash.php 文件中指定驱动程序来使用其他驱动程序“bcrypt”、“argon”、“argon2id”进行散列,因为它们目前支持这 3 个驱动程序。因此,如果您想使用 laravel 默认的身份验证系统,请使用其中之一,否则创建您自己的身份验证系统(md5,或任何您想要的)
标签: laravel authentication laravel-passport