iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 27
1
Modern Web

PHP laravel的邂逅系列 第 27

DAY27-laravel 認證介紹

DAY27-laravel 認證介紹

介紹

Laravel 讓實作認證變得非常簡單。事實上,幾乎所有東西都是可以藉由設定來直接使用。認證設定檔被放在 config/auth.php,其中包含了幾個有良好文件的選項,以此來調整認證服務的行為。

在 Laravel 的核心中,身份驗證工具是由「守衛」和「提供者」所組成。守衛定義了在每個請求中,如何與使用者進行身份驗證。舉例來說,Laravel 內建的一個 session 守衛會使用 session 儲存器和 cookies 來維護驗證狀態。然後另一個 token 守衛會使用每個請求所傳遞的「API token」來認證使用者。

提供者定義了如何從你的永久性儲存區取得使用者資料。Laravel 內建支援使用 Eloquent 和資料庫查詢產生器來取得使用者資料。然而,你可以自由地根據你的應用程式需要來定義額外的提供者。

入門

在每個專案建立之初,裡面會有User相關的資料,這邊就是使用Eoquent認證驅動的。

php artisan make:auth

上面的指令會建立預設的註冊與登入的認證檔案,連view也都建立好了,就不用在自己手刻畫面了,在controller的部分,會產生一個HomeController,所有處理登入的控制都在這邊,也可以自己手動更改裡面的控制器或是使用預設的。

視圖的部分,認證相關的視圖會在resources/views/auth這隻檔案中,resources/views/layouts,相關的版面設定都在layouts裡面了。

$user = Auth::user();

透過Auth可以取得已過認證的使用者,或是另一種方法也可以,下面的方法,如果是登入的使用者,會回傳true不是的話就是false。

也可以使用中介層幫我們先驗證是否為登入的使用者。

if (Auth::check()) {
    // 這個使用者已經登入...
}
// 使用路由閉包...

Route::get('profile', ['middleware' => 'auth', function() {
    // 只有認證過的使用者能進來這裡...
}]);

// 使用控制器...

Route::get('profile', [
    'middleware' => 'auth',
    'uses' => 'ProfileController@show'
]);

上面都是用預設的方法,也可以使用自己的驗證方法如下

attempt 方法的第一個參數接受一個鍵值對陣列,在這個陣列的值會用來找尋資料庫裡的使用者資料,所以在上面的範例中,使用者會藉由 email 欄位取得,如果使用者被找到了,資料庫裡經過雜湊的密碼將會與陣列中雜湊的 password 值做比對,如果兩個雜湊密碼相符的話,會開啟一個通過認證的 session 給使用者。

如果認證成功,attempt 方法將會回傳 true,反之則為 false。

<?php

namespace App\Http\Controllers;

use Auth;
use Illuminate\Routing\Controller;

class AuthController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            // 認證通過...
            return redirect()->intended('dashboard');
        }
    }
}

上一篇
DAY26-laravel email教學
下一篇
DAY28-laravel 授權介紹
系列文
PHP laravel的邂逅30

尚未有邦友留言

立即登入留言