Почему attempt возвращает false

91
09 декабря 2021, 01:00

Столкнулся ошибкой при аутентификации: при попытке пройти её, метод 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 и как правильно указывать пароль аутентификации?

Answer 1

Аутентификация в laravel по умолчанию работает с колонкой password, а точнее с атрибутом модели User $password.

У вас есть 2 варианта:

1) Переименовать колонку passhash в password.

2) Переопределить метод getAuthPassword() в модели User:

public function getAuthPassword()
{
    return $this->passhash;
}

С созданием пользователя все в порядке, Hash::make() по умолчанию использует алгоритм bcrypt, поэтому Hash::make() и bcrypt() фактически делают одно и то же.

READ ALSO
Вывод данных из json массива по условию

Вывод данных из json массива по условию

Помогите разобраться, я никак не могу понять, как вывести нужны данные из json массива

101
диапазон времени от 4 дня до 12 ночи

диапазон времени от 4 дня до 12 ночи

сделал проверку по интервалу времени, но не могу решить одну загвоздку

114
Почему токен возвращаемый ulogin невалидный?

Почему токен возвращаемый ulogin невалидный?

Делаю с сайта ulogin всё по интсрукции, авторизируюсь и получаю токенПотом я делаю запрос:

96