Laravel не может войти в систему пользователя программно - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь войти в систему автоматически после регистрации, поэтому я переопределил функцию registered():

protected function registered(Request $request, $user)
{
    Auth::login($user);
    logger('check', [Auth::check()]);
    return redirect('/');
}

Но пользователь перенаправляет на страницу входа!Я также попробовал следующий код:

Auth::loginUsingId($user->id);
logger('check', [Auth::check()]);
return redirect('/');

Но тот же результат!Также логгер записывает Auth::check() строку, результат: check [true]!

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

Я использую эти строки кода для входа в систему пользователя

public function login(Request $request)
{
    if(Auth::attempt(['email' => $request->email, 'password' => $request->password]))
    {
        $user = \App\User::where('email', $request->email)->first();
        $this->guard('web')->login($user);
        # user logged in and remembered
        }
    else {
       # didn't match
    }
}

protected function guard()
{
    return Auth::guard();
}
0 голосов
/ 03 декабря 2018

попробуйте использовать вот так

Войдите в систему и «запомните» данного пользователя ...

Auth::login($user, true);

в противном случае укажите охрану как этот

Auth::guard('admin')->login($user);

третий способ входа в систему с использованием идентификатора

Auth::loginUsingId(1);

Войдите в систему и «запомните» данного пользователя ...

Auth::loginUsingId(1, true);
0 голосов
/ 03 декабря 2018

Я сделал для своего приложения для социальных сетей простую регистрацию, работая с панелью инструментов.Это мой кодЭто помогло мне раньше, у меня та же проблема, но я решил это.

public function postSignUp(Request $request)
  {
    $this->validate($request,[
        'email' => 'required|email|unique:users',
        'first_name'=> 'required|max:120', 
        'password'=>'required|min:4'
    ]);
       $email = $request['email'];
       $first_name = $request['first_name'];
       $password = bcrypt($request['password']);

       $user = new User();
       $user->email = $email;
       $user->first_name = $first_name;
       $user->password = $password;
       $user->save();
       Auth::login($user);
       return redirect()->route('dashboard');

  }

Готовая простая функция, работающая для входа.

public function postSignIn(Request $request)
  { 
        $this->validate($request,[
        'email' => 'required', 
        'password'=>'required'
        ]);
      if(Auth::attempt(['email'=> $request['email'], 'password'=> $request['password']])) 
      {
          //Log in users if true e mail and pass go to dashboard
          return redirect()->route('dashboard');
      }
      return redirect()->back();
  }
0 голосов
/ 03 декабря 2018

Попробуйте:

Auth::onceUsingId($user->id);

Если вход в систему пользователя без сеансов и файлов cookie;

Надеюсь, что это поможет

Обновление

Вам нужно изменить перенаправление, чтобы оно было перенаправлено при входе в систему, как описано здесь:

https://laravel.com/docs/5.7/authentication#included-authenticating

и используйте логическое значение запоминания, как здесь:

https://laravel.com/docs/5.7/authentication#other-authentication-methods

Таким образом, ваш код будет просто:

Auth::login($user, true);

И перенаправление будет выполнено с:

protected $redirectTo = '/';

на моделях, как описано в ссылке выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...