Laravel- Auth 登入驗證

lanffff發表於2019-04-21

Auth登入驗證是laravel框架自帶的一種登入驗證方式,下面來介紹一下用Auth來實現使用者的登入,退出,及獲取登入使用者資訊的方法。
以laravel5.5框架為例,首先建立一個user model,關聯資料庫的user表,生成的模型內容如下:

     namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    //關聯表 
    protected $table = 'users';
    //可新增欄位
    protected $fillable = ['name','email','password'];
    //隱藏欄位
    protected $hidden = ['password','member_token'];
}

1.實現Auth登入的第一步就是對生成的模型進行改造,引入Authenticatable認證介面,並且改變model的繼承方式,改為Authenticatable繼承,改造後的程式碼如下:

namespace App\Models;

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

class User extends Authenticatable
{
    //關聯表 
    protected $table = 'users';
    //可新增欄位
    protected $fillable = ['name','email','password'];
    //隱藏欄位
    protected $hidden = ['password','member_token'];
}

2.在laravel框架中找到config檔案中的auth.php檔案,找到如下程式碼:

 'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

這部分是auth認證模組的資料介面,把model的路徑改為剛才建立的model路徑即可。
3.在更改好user模型之後,我們就可以進行對此模型資訊的登入認證功能了。Auth為我們們提供了一下幾種登入的認證的使用方法:
驗證登入方法:Auth::attempt(['email' => $email, 'password' => $password])
登入方法:Auth::login()
退出登入方法:Auth::logout()
驗證是否登入:@if (Auth::check()) 已登入 @endif
輸出儲存資訊:Auth::user()
4.登入 退出 邏輯展示
登入

    public function login(Request $request){

           //正則驗證
         $credentials = $this->validate($request, [
           'email' => 'required|email|max:255',
           'password' => 'required'
       ]);

             //驗證登入
       if (Auth::attempt($credentials,$request->has('remember'))) {

             if(Auth::user()->activated=='1'){
                     session()->flash('success','歡迎回來!');
                     return redirect()->intended(route('users.show',[Auth::user()]));
             }else{
                    Auth::logout();
                    return redirect('/');
             }
       } else {
           // 登入失敗後的相關操作
           session()->flash('danger', '很抱歉,您的郵箱和密碼不匹配');
           return redirect()->back();
       }
       return;
    }

退出

 public function end()
    {
        Auth::logout();
        session()->flash('success', '您已成功退出!');
        return redirect('login');
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章