![](/img/trans.png)
[英]Laravel Auth::login() doesn't persist after change domain in session
[英]Laravel auth::login in EventListener doesn't persist
我有一個 Laravel 5.2 應用程序,我正在嘗試在事件偵聽器中登錄用戶。 所有路由都包含在 Web 中間件中,我正在為會話使用數據庫,我看到它在事件偵聽器執行時創建了一個條目,但是稍后訪問其他頁面的行為就好像會話中沒有用戶一樣。
只是為了測試我的代碼,我在控制器路由中添加了相同的偵聽器代碼並且有效,它仍然存在。 我懷疑這與事件偵聽器無法使用 Web 中間件有關。 我試過在控制器中處理事件,同樣的行為。
我注意到 session 數據庫表中的 user_id 在從事件偵聽器登錄時設置為 null,但從控制器登錄時它具有正確的值。 我不確定這是為什么或如何更改它(在登錄前顯式設置user_id
字段無效)
此外,登錄后立即在事件偵聽器中調用Auth::user()
返回有效用戶! 它只是對應用程序的其余部分不可用。 我懷疑這是因為觸發事件的插件在一個單獨的迷你應用程序中,如路由所見。 將它包裝在同一個中間件中也沒有效果。
我該怎么做才能讓事件偵聽器登錄在整個應用程序中持續存在?
// EventListener, doesn't persist
public function handle(Saml2LoginEvent $event)
{
$user = $event->getSaml2User();
$laravelUser = User::where('mail', $user->getAttributes()['mail'][0])->where('active', 1)->first() ;
Auth::guard('web')->login($laravelUser);
}
// UserController, persists !
public function home(Request $request){
$laravelUser = User::where('mail', 'test@mail.com')->where('active', 1)->first() ;
Auth::guard('web')->login($laravelUser);
}
事件偵聽器類必須是Web中間件的一部分,才能訪問會話持久性。 因此,將這些類添加到Web中間件組即可解決問題
Auth::login($user) 即使在嘗試了一切之后也對我不起作用。 (添加了 saml 中間件等)。
從監聽器中刪除所有 dump()、var_dump()、die() 等后,它對我有用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.