Blink授權(quán)與認(rèn)證

2018-11-25 22:01 更新

Blink認(rèn)證與授權(quán)

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

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

定義 User Identity

為了定義一個(gè) User Identity 類,我們需要實(shí)現(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;

    /**
     * 通過用戶的唯一標(biāo)志查找用戶,例如 主鍵、郵箱
     */
    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 中唯一標(biāo)志這個(gè)用戶
     */
    public function getAuthId()
    {
        return $this->id;
    }

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

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

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

Blink用戶認(rèn)證

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

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

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

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

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

Blink用戶授權(quán)

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號