Laravel 5.3 身份验证外观正在更改为默认的经过身份验证的用户



所以我在我的 laravel 网站中有一个自定义登录流程。用户位于可通过 API 访问的外部数据存储中。流程基本上是这样的。(缩小(

public function login(Request $request) {
$resultFromAPI = //call external API with email and password from $request
if($resultFromAPI) {
$user = User::find($resultFromAPI->user->user_id);
if($user) { //user exists
Auth::login($user);
//dump( Auth::user() );
return redirect('/');
} else {
$user = User::create([...]); //from $resultFromApi->user
Auth::login($user);
//dump( Auth::user() );
return redirect('/');
}
}
}

如果我尝试使用user2@example.com登录,转储将显示该用户的对象。但是,第二个我被重定向到/Auth::user()将被user1@example.com我的本地数据库显示这两个用户记录,但它默认为第一个用户。我正在使用默认注销函数注销并清除会话,并且我已经确认在调用注销函数时Auth::user()为空。我被卡住了。

编辑:我尝试Auth::attempt(...)而不是Auth::login(...),它没有改变任何东西

EDIT2:我使用laravel 5.4的全新安装从头开始,将登录部分重写为此

if ($this->attemptLogin($request)) {
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->sendLoginResponse($request);
}

而不是这个

Auth::login($user);
return redirect('/')

还是同样的问题

终于解决了这个问题。我的主键是从外部 API 检索的自定义 uuid。我将主要 ley 恢复为默认 ley($table->increments('id');并且它起作用了。

我查了一下,结果发现我可以在我的用户模型中做public $incrementing = false;它会阻止Laravel认为这是一个递增的领域,这可能已经解决了它,但我还没有测试过。

相关内容

最新更新