久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

yii2 resetful 授權(quán)驗(yàn)證詳解

這篇文章主要介紹了yii2 resetful 授權(quán)驗(yàn)證詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

什么是restful風(fēng)格的api呢?我們之前有寫過大篇的文章來介紹其概念以及基本操作。

既然寫過了,那今天是要說點(diǎn)什么嗎?

這篇文章主要針對實(shí)際場景中api的部署來寫。

我們今天就來大大的侃侃那些年api遇到的授權(quán)驗(yàn)證問題!獨(dú)家干活,如果看完有所受益,記得不要忘記給我點(diǎn)贊哦。

業(yè)務(wù)分析

我們先來了解一下整個邏輯

1.用戶在客戶端填寫登錄表單
2.用戶提交表單,客戶端請求登錄接口login
3.服務(wù)端校驗(yàn)用戶的帳號密碼,并返回一個有效的token給客戶端
4.客戶端拿到用戶的token,將之存儲在客戶端比如cookie中
5.客戶端攜帶token訪問需要校驗(yàn)的接口比如獲取用戶個人信息接口
6.服務(wù)端校驗(yàn)token的有效性,校驗(yàn)通過,反正返回客戶端需要的信息,校驗(yàn)失敗,需要用戶重新登錄

本文我們以用戶登錄,獲取用戶的個人信息為例進(jìn)行詳細(xì)的完整版說明。

以上,便是我們本篇文章要實(shí)現(xiàn)的重點(diǎn)。先別激動,也別緊張,分析好了之后,細(xì)節(jié)部分我們再一步一個腳印走下去。

準(zhǔn)備工作

1.你應(yīng)該有一個api應(yīng)用.
2.對于客戶端,我們準(zhǔn)備采用postman進(jìn)行模擬,如果你的google瀏覽器還沒有安裝postman,請先自行下載
3.要測試的用戶表需要有一個api_token的字段,沒有的請先自行添加,并保證該字段足夠長度
4.api應(yīng)用開啟了路由美化,并先配置post類型的login操作和get類型的signup-test操作
5.關(guān)閉了user組件的session會話

關(guān)于上面準(zhǔn)備工作的第4點(diǎn)和第5點(diǎn),我們貼一下代碼方便理解

'components' => [
 'user' => [ 
  'identityClass' => 'common\models\User',
  'enableAutoLogin' => true,
  'enableSession' => false,
 ],
 'urlManager' => [
  'enablePrettyUrl' => true,
  'showScriptName' => false,
  'enableStrictParsing' => true,
  'rules' => [
   [
    'class' => 'yii\rest\UrlRule',
    'controller' => ['v1/user'],
    'extraPatterns' => [
     'POST login' => 'login',
     'GET signup-test' => 'signup-test',
    ]
   ],
  ]
 ],
 // ......
],

signup-test操作我們后面添加測試用戶,為登錄操作提供便利。其他類型的操作后面看需要再做添加。

認(rèn)證類的選擇

我們在api\modules\v1\controllers\UserController中設(shè)定的model類指向 common\models\User類,為了說明重點(diǎn)這里我們就不單獨(dú)拿出來重寫了,看各位需要,有必要的話再單獨(dú)copy一個User類到api\models下。

校驗(yàn)用戶權(quán)限我們以 yii\filters\auth\QueryParamAuth 為例

use yii\filters\auth\QueryParamAuth;

public function behaviors() 
{
 return ArrayHelper::merge (parent::behaviors(), [ 
   'authenticator' => [ 
    'class' => QueryParamAuth::className() 
   ] 
 ] );
}

如此一來,那豈不是所有訪問user的操作都需要認(rèn)證了?那不行,客戶端第一個訪問login操作的時候哪來的token,yii\filters\auth\QueryParamAuth對外提供一個屬性,用于過濾不需要驗(yàn)證的action。我們將UserController的behaviors方法稍作修改

public function behaviors() 
{
 return ArrayHelper::merge (parent::behaviors(), [ 
   'authenticator' => [ 
    'class' => QueryParamAuth::className(),
    'optional' => [
     'login',
     'signup-test'
    ],
   ] 
 ] );
}

這樣login操作就無需權(quán)限驗(yàn)證即可訪問了。

添加測試用戶

為了避免讓客戶端登錄失敗,我們先寫一個簡單的方法,往user表里面插入兩條數(shù)據(jù),便于接下來的校驗(yàn)。 

UserController增加signupTest操作,注意此方法不屬于講解范圍之內(nèi),我們僅用于方便測試。

use common\models\User;
/**
 * 添加測試用戶
 */
public function actionSignupTest ()
{
 $user = new User();
 $user->generateAuthKey();
 $user->setPassword('123456');
 $user->username = '111';
 $user->email = '111@111.com';
 $user->save(false);

 return [
  'code' => 0
 ];
}

如上,我們添加了一個username是111,密碼是123456的用戶

登錄操作

假設(shè)用戶在客戶端輸入用戶名和密碼進(jìn)行登錄,服務(wù)端login操作其實(shí)很簡單,大部分的業(yè)務(wù)邏輯處理都在api\models\loginForm上,來先看看login的實(shí)現(xiàn)

use api\models\LoginForm;

/**
 * 登錄
 */
public function actionLogin ()
{
 $model = new LoginForm;
 $model->setAttributes(Yii::$app->request->post());
 if ($user = $model->login()) {
  if ($user instanceof IdentityInterface) {
   return $user->api_token;
  } else {
   return $user->errors;
  }
 } else {
  return $model->errors;
 }
}

登錄成功后這里給客戶端返回了用戶的token,再來看看登錄的具體邏輯的實(shí)現(xiàn)

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

Yii2的rule用于對模型屬性進(jìn)行驗(yàn)證,scenario用戶定義不同場景下需要驗(yàn)證的模型,下面這篇文章主要給大家介紹了關(guān)于Yii2中場景(scenario)和驗(yàn)證規(guī)則(rule)的相關(guān)資料,文中通過示例代碼介
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了Yii2之組件的注冊與創(chuàng)建的實(shí)現(xiàn)方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實(shí)現(xiàn)方法,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
下面小編就為大家?guī)硪黄猋ii2使用駝峰命名的形式訪問控制器(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了Yii2.0實(shí)現(xiàn)生成二維碼功能,結(jié)合實(shí)例形式分析了Yii2.0框架生成二維碼所涉及的相關(guān)擴(kuò)展引入步驟與使用方法,需要的朋友可以參考下
主站蜘蛛池模板: 欧美一级片在线播放 | 人人九九精| 51ⅴ精品国产91久久久久久 | 亚洲三级免费看 | 日韩中文一区二区三区 | 欧美亚洲国产一区 | 国产精品伦一区二区三级视频 | 91小视频 | 美女三区 | 精品久久一区 | 麻豆va | 亚洲成人综合社区 | 亚洲激情在线观看 | 99亚洲国产精品 | 天天综合国产 | 一级高清免费毛片 | 亚洲不卡av在线 | 国产精品污www一区二区三区 | 天天澡天天狠天天天做 | 91国内外精品自在线播放 | 国产日韩精品在线 | 天天色官网 | 亚洲国产高清在线观看 | 成年人网站免费 | 毛片黄片| 在线中文av| 亚洲视频在线观看 | 韩国主播午夜大尺度福利 | 能免费看的av | 欧美激情精品久久久久久免费 | 一区二区久久精品 | 中国一级特黄真人毛片免费观看 | 我我色综合| 久久综合九色综合欧美狠狠 | 欧美videosex性极品hd | 中文二区 | 欧美激情久久久久久 | 影音先锋中文字幕在线观看 | 亚洲国产成人精品久久久国产成人一区 | 午夜精品久久久久久久久久久久久 | www.精品国产 |