2016-03-07 77 views
1

我正在創建類似於聊天應用程序的應用程序。使用Laravel 5檢查「其他」用戶是否已登錄/註銷

我希望能夠確定用戶是否登錄。

我這樣做的方法是在users表中有is_logged_in字段。

但是我不確定如何更新這個變量,因爲我不知道在logout期間調用了什麼方法。

我相信它會是這樣的:

class AuthController extends Controller 
{ 
    //... 
    public function login($user) 
    { 
     $user->is_logged_in = true; 
     $user->save(); 
    } 

    public function logout($user) 
    { 
     $user->is_logged_in = false; 
     $user->save(); 
    } 

    //... 
} 

當然的loginlogout並不運行在用戶實際登錄和註銷的方法,但我不能確定在何處把邏輯。

感謝您的幫助!

UPDATE 這些是認證的路由。

Route::get('login', 'Auth\[email protected]')->name('login'); 
Route::post('login', 'Auth\[email protected]')->name('postLogin'); 
Route::get('logout', 'Auth\[email protected]')->name('logout'); 

Route::get('register', 'Auth\[email protected]')->name('register'); 
Route::post('register', 'Auth\[email protected]')->name('postRegister'); 

編輯 我知道我可以檢查當前用戶使用認證:

Auth::check() 

然而,這並不能幫助確定是否其他用戶登錄或不

+0

您可以使用Session ::集()和會話::得到()方法來最終處理login.And可以使用會話:: flush()方法在Laravel註銷用戶。 – CodeCanyon

+0

我認爲與我的相比,這是一個糟糕的解決方案,因爲身份驗證特徵中有很多邏輯無法運行。與使用事件相比,它更復雜! –

回答

1
class AuthController extends Controller 
{ 
    //... 
    public function login($user) 
    { 
     // You can choose to check if the user is logged in 
     // before you authenticate the user but its not really necessary because it can cause issues 
     if(Auth::check()){ 
     // user is logged in 
     }else{ 
     if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
      // The user is active, not suspended, and exists. 
     } 
     } 
    } 

    public function logout($user) 
    { 
    if(!Auth::check()){ 
     // user is logged out 
    }else{ 
     Auth::logout(); 
    } 
    } 

} 

編輯

我猜你想知道的是認證真的發生(laravel 5.2)

您可以檢查AuthenticatesUsers特質。即getLogin()函數被調用

+0

我不認爲這是有效的,因爲這些方法甚至不運行!我把'dd(「hi')'放在方法的頂部,它們沒有運行!我的代碼中的例子只是一個例子,我需要一個地方來放置我的代碼 –

+0

你是如何登錄用戶的 – oseintow

+0

使用'Route :: get('login','Auth \ AuthController @ getLogin') - > name('login');'並且我沒有創建一個名爲「getLogin」的方法,它會自動執行它 –

0

從Laravel文檔中找到here

確定當前用戶進行身份驗證

要確定用戶是否已經登錄到您的應用程序,你 可如果 用戶使用的驗證門面的檢查方法,該方法將返回true證實:

if (Auth::check()) { 
    // The user is logged in... 
} 
+0

但它不會幫助確定其他用戶是否已登錄。我正在創建一個聊天應用程序。 –

0

解決方案1:編輯用戶控制器[NOT推薦]

AuthicatesUsers性狀一些仔細檢查我設法解決這個問題:

我添加下面的方法到User模型;

public function authenticated($request, User $user) { 
    $user->is_logged_in = true; 
    $user->save(); 
    return redirect()->intended($this->redirectPath()); 
} 

public function getLogout() 
{ 
    if (Auth::check()) { 
     $user = Auth::user(); 
     $user->is_logged_in = false; 
     $user->save(); 
    } 

    Auth::logout() 
    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/'); 
} 

解決方案2:使用活動[推薦]

我發現解決方案1是也許不是最好的辦法,因爲有其他的方式,用戶可以登錄(例如社交身份驗證)。

因此最好使用事件。即這些添加到EventServiceProviderboot方法:

public function boot(DispatcherContract $events) 
{ 
    parent::boot($events); 

    $events->listen('auth.login', function (User $user, $remember) { 
     $user->is_logged_in = true; 
     $user->save(); 
    }); 

    $events->listen('auth.logout', function (User $user) { 
     $user->is_logged_in = false; 
     $user->save(); 
    }); 
} 
相關問題