Столкнулся ошибкой при аутентификации: при попытке пройти её, метод Auth::attempt возвращает false, хотя телефон и пароль правильный.
Я думаю дело в том, что в моей таблице password называется, как passhash.
Таблица - User
Класс регистрации:
protected function create(Request $data) {
if (User::where('phone', '=', $data['phone'])->exists()) {
return response()->json(array('status' => 'error', 'msg'=>'The phone number already exists'), 422);
} else {
$user_id = User::create([
'first_name' => $data['first_name'],
'surname' => $data['surname'],
'phone' => $data['phone'],
'passhash' => bcrypt($data['password']),
]);
return response()->json(array('status' => 'created', 'id' => $user_id['id']), 201);
}
}
Класс аутентификации
public function login(Request $request) {
$credentials = [
'phone' => $request['phone'],
'password' => $request['password'],
];
if (Auth::attempt($credentials)) {
return response()->json(array('token' => 'Вы успешно авторизировались!'), 200);
} else {
return response()->json([
'error' => 'Incorrect phone or password',
], 404);
}
}
Меня так же беспокоит правильно ли, что я при регистрации пароль хеширую bcrypt или лучше использовать Hash::make и как правильно указывать пароль аутентификации?
Аутентификация в laravel по умолчанию работает с колонкой password, а точнее с атрибутом модели User $password.
У вас есть 2 варианта:
1) Переименовать колонку passhash в password.
2) Переопределить метод getAuthPassword() в модели User:
public function getAuthPassword()
{
return $this->passhash;
}
С созданием пользователя все в порядке, Hash::make() по умолчанию использует алгоритм bcrypt, поэтому Hash::make() и bcrypt() фактически делают одно и то же.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости