Laravel 5.3 Auth 外观正在更改为默认的经过身份验证的用户
Posted
技术标签:
【中文标题】Laravel 5.3 Auth 外观正在更改为默认的经过身份验证的用户【英文标题】:Laravel 5.3 Auth facade is changing to a default authenticated user 【发布时间】:2017-12-27 06:41:45 【问题描述】:所以我在我的 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('/')
还是一样的问题
【问题讨论】:
你没有忘记一些测试代码,比如Auth::loginUsingId($user_id, true);
或类似的东西吗??
我跟踪了从调用/login
到重定向到/
的流程,包括中间件。 (我在路由中使用了auth
中间件)我什至在整个目录中搜索了Auth::
,并没有发现任何异常。
假设电子邮件user2@example.com
的用户id = 2,尝试使用Auth::loginUsingId(2, true);
而不在login
方法中调用你的外部api,然后return redirect('/');
看它是否会生成同样的问题!!
还是同样的问题。用user1@example.com
重定向我。我尝试回显电子邮件(Auth::user()->email
)并注释掉重定向功能,我得到了user2@example.com
。
【参考方案1】:
终于解决了问题。我的主键是从我的外部 api 检索到的自定义 uuid。我将主要的 ley 恢复为默认的($table->increments('id');
并且它有效。
我looked it up,原来我可以在我的用户模型中完成public $incrementing = false;
,它会阻止 Laravel 认为它是一个递增字段,这可能已经解决了它,但我还没有测试那。
【讨论】:
以上是关于Laravel 5.3 Auth 外观正在更改为默认的经过身份验证的用户的主要内容,如果未能解决你的问题,请参考以下文章