Blink授權(quán)與認證

2018-11-25 22:01 更新

Blink認證與授權(quán)

Blink 提供了一套輕量級的認證授權(quán)框架,通過這套框架我們可以更加方便的在我們的應用中實現(xiàn)認證與授權(quán)的系列功能。

在 Blink 中,認證特性是由 auth 服務組件來完成的,我們可以通過 auth() 輔助函數(shù)來獲取該服務的實例。為了讓auth 服務知道如何查找一個 用戶并驗證其密碼的正確性,我們首先需要定義一個 User Identity 類來告訴 auth 服務這些信息:

定義 User Identity

為了定義一個 User Identity 類,我們需要實現(xiàn) blink\auth\Authenticatable 接口,下面的例子展示了如何利用靜態(tài)用戶數(shù)據(jù)定義 User Identiry:

namespace app;

class User extends Object implements Authenticatable
{
    public static $users = [
        ['id' => 1, 'name' => 'user1', 'password' => 'user1'],
        ['id' => 2, 'name' => 'user2', 'password' => 'user2']
    ];

    public $id;
    public $name;
    public $password;

    /**
     * 通過用戶的唯一標志查找用戶,例如 主鍵、郵箱
     */
    public static function findIdentity($id)
    {
        if (is_numeric($id)) {
            $key = 'id';
            $value = $id;
        } else if (is_array($id) && isset($id['name'])) {
            $key = 'name';
            $value = $id['name'];
        } else {
            throw new InvalidParamException("The param: id is invalid");
        }

        foreach (static::$users as $user) {
            if ($user[$key] == $value) {
                return new static($user);
            }
        }
    }

    /**
     * 返回該用戶的 Auth ID,用于存儲到 Session 中唯一標志這個用戶
     */
    public function getAuthId()
    {
        return $this->id;
    }

    /**
     * 檢查用戶的密碼是否與用戶輸入相匹配
     */
    public function validatePassword($password)
    {
        return $this->password === $password;
    }
}

User Identity 定義好之后,我們需要配置 auth 服務,設(shè)置 model 屬性告訴 auth 服務 User Identity 是怎樣定義的:

'auth' => [
    'class' => 'blink\auth\Auth',
    'model' => 'app\User',
],

Blink用戶認證

只要 User Identity 定義并且配置好,我們就可以通過用戶輸入的用戶名和密碼來認證用戶了,下面是例子:

$creditials = ['email' => 'foo@bar.com', 'password' => 123];

// 通過給定的用戶名和密碼進行用戶認證
$user = auth()->attempt($creditials);

// 進行用戶認證但是不啟用 Session
$user = auth()->once($creditials);

如果采用 auth()->attempt() 來認證用戶,auth 服務會利用 session 服務來為認證的用戶存儲必要的 Session 數(shù)據(jù),所以我們需要配置好 session 服務以獲取期望的結(jié)果。

Blink用戶授權(quán)

授權(quán)是檢查一個用戶具有足夠權(quán)限做某事的過程,Blink 中,該功能由 blink\http\Request 類實現(xiàn),下面是一個簡單的例子:

use blink\core\Object;
use blink\http\Request;

class Controller extends Object
{
    public function actionFoo(Request $request)
    {
        if (!$requst->guest()) {
            $user = $requst->user(); // 獲取當前授權(quán)成功的用戶
        }
    }
}

目前,Blink 默認采用 X-Session-Id Http 頭來傳輸 Session Id。當然,這也是可以配置的,我們可以通過設(shè)置blink\http\Request 的 sessionKey 屬性來改變這個行為,關(guān)于如何設(shè)置該屬性,請查看對應類實現(xiàn)的注釋。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號