国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Yii2.0 RESTful API 認證教程

JohnLui / 2910人閱讀

摘要:請求參數當作請求參數發送,例如,由于大多數服務器都會保存請求參數到日志,這種方式應主要用于請求,因為它不能使用頭來發送使用者從認證服務器上獲取基于協議的,然后通過發送到服務器。

認證介紹

和Web應用不同,RESTful APIs 通常是無狀態的, 也就意味著不應使用 sessionscookies, 因此每個請求應附帶某種授權憑證,因為用戶授權狀態可能沒通過 sessionscookies 維護, 常用的做法是每個請求都發送一個秘密的 access token 來認證用戶, 由于 access token 可以唯一識別和認證用戶,API 請求應通過 HTTPS 來防止man-in-the-middle (MitM) 中間人攻擊.

認證方式

HTTP 基本認證 :access token 當作用戶名發送,應用在access token可安全存在API使用端的場景, 例如,API使用端是運行在一臺服務器上的程序。

請求參數: access token 當作API URL請求參數發送,例如 https://example.com/users?access-token=xxxxxxxx, 由于大多數服務器都會保存請求參數到日志, 這種方式應主要用于JSONP 請求,因為它不能使用HTTP頭來發送 access token

OAuth 2 : 使用者從認證服務器上獲取基于 OAuth2 協議的 access token, 然后通過 HTTP Bearer Tokens 發送到 API 服務器。

上方進行簡單介紹,內容來自 Yii Framework 2.0 權威指南

實現步驟

我們都知道 Yii2.0 默認的認證類都是 User,前后臺都是共用一個認證類,因此我們要把API 認證類 多帶帶分離出來,達到前、后、API都分離,
繼上一章:(這里暫時使用默認User數據表,正式環境請分離不同的數據表來進行認證)

準備條件

繼上篇的 User 數據表,我們還需要增加一 個access_token 的字段,

直接在你的數據庫中新增 access_token 字段。

使用數據遷移的方式

進入項目根目錄打開控制臺輸入以下命令:

php yii migrate/create add_access_token_to_user

打開 你的項目目錄/console/migrations/m180704_054630_add_access_token_to_user.php 修改如下內容:

    public function safeUp()
    {
        $this->addColumn("user", "access_token", $this->string());
    }

    public function safeDown()
    {
        $this->dropColumn("user", "access_token");
    }

執行遷移命令

php yii migrate
瀏覽器打開前臺目錄 frontend 頁面,點擊注冊賬號,先注冊一個賬號
配置

打開 apiconfigmain.php

配置 user 應用組件:
* 設置 `identityClass` 屬性為哪個認證類
* 設置 `enableSession` 屬性為 `false`
* 設置 `enableAutoLogin` 屬性為 `true`
session 組件注釋掉,或刪掉
"user" => [
            "identityClass" => "apimodelsUser",
            "enableAutoLogin" => true,
            "enableSession"=>false,
            //"identityCookie" => ["name" => "_identity-backend", "httpOnly" => true],
        ],
//"session" => [ // this is the name of the session cookie used for login on the backend
//            "name" => "advanced-backend",
//        ],
編寫 apimodelsUser.php 實現認證類,繼承 IdentityInterface

commonmodelsUser 類拷貝到 apimodels目錄下,修改命名空間為apimodels


commonmodelsLoginForm.php 類拷貝到apimodels目錄下,修改命名空間,并重寫login方法:
validate()) {
        $access_token=$this->_user->generateAccessToken();
        $this->_user->save();
        return $access_token;
    } else {
        return false;
    }
}
上方代碼給User模型添加了一個generateAccessToken()方法,因此我們到apimodelsUser.php中添加此方法
namespace apimodels;

use Yii;
use yiiaseNotSupportedException;
use yiiehaviorsTimestampBehavior;
use yiidbActiveRecord;
use yiiwebIdentityInterface;
...
...
class User extends ActiveRecord implements IdentityInterface
{
    ...
    ...
    
    /**
     * 生成accessToken字符串
     * @return string
     * @throws yiiaseException
     */
    public function generateAccessToken()
    {
        $this->access_token=Yii::$app->security->generateRandomString();
        return $this->access_token;
    }
}
接下來打開 之前的User 控制器編寫登錄方法
use apimodelsLoginForm;
...
... //省略一些代碼


/**
 * 登陸
 * @return array
 * @throws yiiaseException
 * @throws yiiaseInvalidConfigException
 */
public function actionLogin()
{
    $model = new LoginForm();
    if ($model->load(Yii::$app->getRequest()->getBodyParams(), "") && $model->login()) {
        return [
            "access_token" => $model->login(),
        ];
    } else {
        return $model->getFirstErrors();
    }
}
...
最后新增一條URL規則

打開 apiconfigmain.php 修改 components屬性,添加下列代碼:

"urlManager" => [
    "enablePrettyUrl" => true,
    "enableStrictParsing" => true,
    "showScriptName" => false,
    "rules" => [
        ["class" => "yii
estUrlRule", 
            "controller" => "user",
            "extraPatterns"=>[
                "POST login"=>"login",
            ],
        ],
    ],
]
使用一個調試工具來進行測試 http://youdomain/users/login 記住是POST 請求發送,假如用POSTMAN有問題的話指定一下 Content-Type:application/x-www-form-urlencoded。

ok,不出意外的話,相信你已經可以收到一個access_token了,接下來就是如何使用這個token,如何維持認證狀態,達到不攜帶這個token將無法訪問,返回401

維持認證狀態

實現認證只需兩步:

在你的 REST 控制器類中配置 authenticator 行為來指定使用哪種認證方式

在你的 user identity class 類中實現 yiiwebIdentityInterface::findIdentityByAccessToken()-detail) 方法.

接下來我們圍繞這兩步來實現:

添加一個REST控制器

因我這里暫未設計其他數據表 所以我們暫且還使用User 數據表吧

apicontrollers新加一個控制器 命名為 ArticleController 并繼承 yii estActiveController,配置認證方式代碼:代碼如下:

 CompositeAuth::className(),
            "authMethods" => [
                HttpBasicAuth::className(),
                HttpBearerAuth::className(),
                QueryParamAuth::className(),
            ],
        ];
        return $behaviors;
    }
}
注意:這個控制器并非真正的Article,實則還是User

實現 findIdentityByAccessToken() 方法:

打開 apimodelsUser.php 重寫 findIdentityByAccessToken() 方法

...
...
class User extends ActiveRecord implements IdentityInterface
{
    ...
    ...
    
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(["access_token" => $token]);
    }
    ...
}

為剛才新加的控制器添加路由規則(ps:好像多了一步......)

修改 apiconfigmain.php

"urlManager" => [
    "enablePrettyUrl" => true,
    "enableStrictParsing" => true,
    "showScriptName" => false,
    "rules" => [
        ["class" => "yii
estUrlRule",
            "controller" => "user",
            "extraPatterns"=>[
                "GET send-email"=>"send-email"
                "POST login"=>"login",
            ],
        ],
        ["class" => "yii
estUrlRule",
            "controller" => "article",
            "extraPatterns"=>[

            ],
        ],
    ],
]

接下來訪問一下你的域名 http://youdomain/articles,不攜帶任何參數是不是返回 401了?

ok,這里介紹兩種訪問方式,一種是URL訪問,另一種是通過header 來進行攜帶

http://youdomain/articles?acc...

傳遞 header頭信息

Authorization:Bearer y3XWtwWaxqCEBDoE-qzZk0bCp3UKO920
注意 Bearer 和你的token中間是有 一個空格的,很多同學在這個上面碰了很多次

好啦,基于YII2.0 RESTful 認證就此結束了,

更過完整的功能 請移步官方文檔
授權驗證
另外還有速率驗證,就自行發覺吧
另外,如果看不懂,或者寫的不好,請移步 魏曦 老師的視頻教程,本人所有內容都是跟隨 魏曦老師 學的
魏曦教你學

寫完認證發現我們的接口返回的數據不是很直觀,現實生活中通常也不是這樣子的,我們可能會返回一些特定的格式

自定義響應內容

打開 apiconfigmain.phpcomponents數組里面添加如下內容分

"response" => [
    "class" => "yiiwebResponse",
    "on beforeSend" => function ($event) {
        $response = $event->sender;
        $response->data = [
            "success" => $response->isSuccessful,
            "code" => $response->getStatusCode(),
            "message" => $response->statusText,
            "data" => $response->data,
        ];
        $response->statusCode = 200;
    },
],

這里的狀態碼統一設為 200 ,具體的可另行配置,假如登陸操作 密碼錯誤或者其他,我們可以在控制器中這樣使用:

    $response = Yii::$app->response;
    $response->setStatusCode(422);
    return [
        "errmsg" => "用戶名或密碼錯誤!"
    ];

水平有限,難免有紕漏,請不吝賜教,在下會感激不盡

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30848.html

相關文章

  • Yii2.0 RESTful API 之速率限制

    摘要:之速率限制什么是速率限制權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的限流。如果在規定的時間內接收了一個用戶大量的請求,將返回響應狀態代碼這意味著過多的請求。 Yii2.0 RESTful API 之速率限制 什么是速率限制? 權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內最多調用 API 100 次。 如果在規定的時...

    LeviDing 評論0 收藏0
  • Yii2.0 RESTful API 認證教程【令牌驗證】

    摘要:最近在做認證功能,記錄整個過程,方便以后查看。請求參數當作請求參數發送,例如,由于大多數服務器都會保存請求參數到日志,這種方式應主要用于請求,因為它不能使用頭來發送使用者從認證服務器上獲取基于協議的,然后通過發送到服務器。 最近在做RESTful API認證功能,記錄整個過程,方便以后查看。本文參照了 https://segmentfault.com/a/119000001636860...

    X1nFLY 評論0 收藏0
  • Yii2.0 RESTful API 之版本控制

    摘要:之版本控制之前我寫過兩篇關于如何搭建,以及認證等處理,但是沒有涉及到版本管理,今天就來談談版本管理如何實現。如果你還沒有安裝,你可以按照這里的說明進行安裝。 Yii2.0 RESTful API 之版本控制 之前我寫過兩篇關于 Yii2.0 RESTful API 如何搭建,以及 認證 等處理,但是沒有涉及到版本管理,今天就來談談版本管理如何實現。 索性就從頭開始一步一步搭建吧,但是關...

    _ang 評論0 收藏0
  • Yii2.0 RESTful API 基礎配置教程[轉載]

    摘要:最近在做功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內容根據我的項目實際情況做了一定的修改。 最近在做Yii2.0 RESTful API功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內容根據我的項目實際情況做了一定的修改。 安裝yii2.0 安裝 Composer 后,您可以通過在 Web 可訪問的文件夾下運行以下命令來 安裝Yii應用程序模板: compose...

    xorpay 評論0 收藏0
  • Yii2.0 RESTful API 基礎配置教程

    這篇說下yii2.0開發 API 吧,使用 RESTful API模式 安裝Yii2.0 通過 Composer 安裝 這是安裝Yii2.0的首選方法。如果你還沒有安裝 Composer,你可以按照這里的說明進行安裝。 安裝完 Composer,運行下面的命令來安裝 Composer Asset 插件: php composer.phar global require fxp/composer-a...

    fyber 評論0 收藏0

發表評論

0條評論

JohnLui

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<