2017-09-30 98 views
0

用戶註冊我的網站後,系統會發送激活鏈接到用戶的電子郵件和令牌提供的電子郵件。如果電子郵件和令牌與數據庫匹配,那麼它應該更新狀態。狀態已成功更新。我現在想要的是點擊鏈接後自動登錄。如何激活用戶帳戶後自動登錄

以下代碼用於檢查請求是否有效,並在匹配後進行登錄。

http://localhost:8000/verify?email=[email]&token=[token]

控制器

/* GET Method 
*/ 
public function verify(Request $request) 
{ 
    if($request->email && $request->token) 
    { 
     $user = \DB::table('users') 
       ->where('email', '=', $request->email) 
       ->where('verified_token', '=' , $request->token); 

     //if $user found then automatic login 
    } 
} 

下面是我的user.php的

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
use Illuminate\Database\Eloquent\Model; 

class User extends Authenticatable 
{ 
    use Notifiable; 
    //more codes below 
} 

順便說一句,我使用laravel 5.4

回答

2

你可以使用login/loginUsingId方法

public function verify(Request $request) 
{ 
    if($request->email && $request->token) 
    { 
     $user = App\User::where([ 
        ['email', '=', $request->email], 
        ['verified_token', '=' , $request->token] 
       ])->first(); 

     //if $user found then automatic login 
     if (!empty($user)) { 
      $user->update(['status' => 1]); // Change the status 
      Auth::loginUsingId($user->id); //login the user using the user id 
      redirect('/home'); // redirect the user 
     } 
    } 
} 
+0

試過這但錯誤發生'類型錯誤:傳遞給Illuminate \ Auth \ SessionGuard :: login()的參數1必須是n Illuminate \ Contracts \ Auth \ Authenticatable的實例,給出的stdClass實例,294行的Illuminate/Auth/AuthManager.php' – smzapp

+0

'給定的對象必須是Illuminate \ Contracts \ Auth \ Authenticatable契約的實現。當然,Laravel附帶的App \ User模型已經實現了這個接口。確保你的用戶模型實現了'Authenticatable'接口 – linktoahref

+0

是的。將其添加到我的問題 – smzapp

0

你可以使用Auth::login($user)這部分//if $user found then automatic login手動認證用戶,你可以visit this link,因爲您使用的是laravel5.4

1

兩種方法中的應用Laravel登錄

的用戶1.just通對象

$user = App\User::where([ 
       ['email', '=', $request->email], 
       ['verified_token', '=' , $request->token] 
      ])->first(); 
    if (!empty($user)) { 
     $user=$user->update(['status' => 1]); 
     auth()->login($user); 
    } 

2)通過用戶ID在loginUsingId方法這樣

if (!empty($user)) { 
    $user->update(['status' => 1]); 
    auth()->loginUsingId($user); }