我正在创建类似BackOffice(BO)系统的东西。将从一开始就解释。
有2个网站。
在前台网站上制作了默认的Laravel身份验证。 在BO网站上通过Laravel护照进行了api认证,并进行了另一种认证(在BO网站玩家和用户中可以登录,我使用了后卫'玩家'和守卫'用户')。
用户可以通过默认身份验证登录(拥有数据库表用户) 玩家只有在请求通过auth:api middleware后才能登录。
注册。 在前端站点上的玩家填写表单 - 创建前端站点上的新记录。 然后前站点使用新注册的玩家数据向BO站点(通过laravel护照)进行api呼叫。 BO站点签入auth:api如果一切正常 - 然后在BO站点为该新玩家创建新记录。在这个阶段一切都还可以。
登录。播放器在前端站点上进行身份验证 - 一切正常,在前端站点将api呼叫到BO站点进行登录后。 在BO也登录是好的,我看到转储与该播放器数据(做Auth :: guard('玩家') - >登录())。
if (Auth::guard('players')->attempt(array('email' => $request->username, 'password' => $request->password))) {
$loggedUser = Auth::guard('players')->user();
$loggedUser->last_login = date('Y-m-d H:i:s');
$loggedUser->save();
Auth::guard('players')->login($loggedUser, false);
return Auth::guard('players')->user()->toArray();
}
我得到了这个
{"id":3,"username":"pl1","name":"Player 1","email":"pl1@mail.com"}
这意味着一切正常。
然后我对BO进行另一次api调用(例如注销玩家)。 在动作开始时,我检查Auth :: guard('players') - 它是null。只有后卫('api')不为空,但后卫('球员')无效。
public function logout(Request $request)
{
$guards = array_keys(config('auth.guards'));
foreach ($guards as $guard)
{
var_dump($guard);
var_dump(Auth::guard($guard)->check());
}
dd(Auth::guard('players')->user());
$res = Auth::guard('players')->user()->logout();
}
我得到了
string(3) "web" bool(false) string(7) "players" bool(false) string(3) "api" bool(true)
null
无法弄清楚出了什么问题:之前的登录请求我有玩家守卫,但在2秒后我进行了退出呼叫 - 玩家守卫无效。
感谢。