Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.08.2016 10:41:50

Олег

Проблема с авторизацией

Добрый день, пытаюсь сделать регистрацию\авторизацию на laravel 5.1, таблица с пользователями уже есть и при регистрации нового нужно проверить правильность Имени\Фамилии из формы и проверить наличие такого в таблице, если есть то дописать в таблицу логин\пароль, регистрацию сделал, таблица апдейтится, но вот с авторизацией проблемы, attempt() возвращает false.

Если же я пытаюсь залогинить вручную через Auth::login($user) предварительно найдя пользователя $user = User::where('LOGIN', '=', $request->login)->where('PASSWORD', '=', $request->password)->first();, то при редиректе пользователь не запоминается.

Вот контроллер:
   
public function postRegister(Request $request)
    {

        $validator = $this->validator($request->all());
        if ($validator->fails()) {
            $this->throwValidationException($request, $validator);
        };

        mb_internal_encoding("UTF-8");
        function mb_ucfirst($text) {
            return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1);
        }

        $checked = User::check(mb_ucfirst($request->name), mb_ucfirst($request->sname));

        if(!$checked) {
            return redirect()->to('register')->with(['message' => 'Пользователь не найден - введите корректное Имя и Фамилию']);
        } else {
            User::where('ID', $checked)
                ->update([
                    'LOGIN' => $request->login,
                    'PASSWORD' => $request->password,
                ]);
            //редиректим на страницу авторизации с сообщением об активации
            return redirect()->to('login')->with(['message' => 'Регистрация прошла успешно']);
        }
    }

public function postLogin(Request $request)
    {
        $user = User::where('LOGIN', '=', $request->login)->where('PASSWORD', '=', $request->password)->first();
//        $user = Auth::attempt(['LOGIN' => $request->login, 'PASSWORD' => $request->password]);

        if (!$user){
            return redirect()->to('login')->with(['message' => 'Пользователь не найден']);
        }

        Auth::login($user);
        return Redirect()->to('/dashboard');
    }

и еще проблема: если при регистрации пишу в таблицу хэшированый пароль, как потом сравнить введенный пользователем пароль при логине с хэшированным?

База на firebird и имена таблиц и полей написаны заглавными буквами, подозреваю, что attempt() не работает именно по этому, как можно залогинить пользователя?

#2 17.08.2016 15:06:48

Олег

Re: Проблема с авторизацией

Пришлось написать руками:

public function postLogin(Request $request)
    {
        $dbuser = User::where('LOGIN', $request->login)->first();
        if (!$dbuser){
            return redirect()->to('login')->with(['message' => 'Пользователь не найден']);
        }
        $dbPass = $dbuser->PASSWORD;

        if(Hash::check($request->password, $dbPass)){
            Auth::login($dbuser);
            return Redirect()->to('dashboard');
        } else {
            return redirect()->to('login')->with(['message' => 'Не правильный пароль']);
        }
    }

Подвал раздела