关于YII的登录模式应该选择那一种比较好? [ 2.0 版本 ]
首先说下我是一个新手,对YII不是很了解;
最近在网上看到YII支持好几种登录认证方式
1、请求参数方式: restful access token
2、HTTP 基本认证
3、OAuth 2
这三种我们经常用到的应该是第二种吧,用Session Cookie的方式
但是这里我对第一种access token特别的好奇,网上找了很多资料都是讲的要么高深莫测,要么云里雾里的,对于我这个新手来说很吃力呀;
所以在这里问一下有没有那位大神能细节的讲讲他的原理和实现方法,优缺点;
然后我们使用三种的那一种比较方便和比较好
最好有教程出来
万分感谢!
共 3 个回答
-
-
johnny1991 回答于 2017-05-23 01:13 举报
关于access-token使用方法,
1.确保的你的user表里面有access_token这个字段,至于存放什么值你自己看着办就好,但是要保证唯一性
2.在你的controller里面加上下面的代码public function behaviors() { return ArrayHelper::merge([ 'authenticator' => [ 'class' => CompositeAuth::className(), 'authMethods' => [ QueryParamAuth::className(), ], ] ], parent::behaviors()); }
3.在你访问这个controller里面的action的时候,在url后面加上一个access-token的参数就可以了,access-token的值就是你存放在数据里面的值
4.access-token原理,源码参照yii\filters\auth\QueryParamAuthpublic function authenticate($user, $request, $response) { $accessToken = $request->get($this->tokenParam); if (is_string($accessToken)) { $identity = $user->loginByAccessToken($accessToken, get_class($this)); if ($identity !== null) { return $identity; } } if ($accessToken !== null) { $this->handleFailure($response); } return null; }
5.HTTP 基本认证原理,参照yii\filters\auth\HttpBearerAuth或yii\filters\auth\HttpBasicAuth
public function authenticate($user, $request, $response) { $authHeader = $request->getHeaders()->get('Authorization'); if ($authHeader !== null && preg_match('/^Bearer\s+(.*?)$/', $authHeader, $matches)) { $identity = $user->loginByAccessToken($matches[1], get_class($this)); if ($identity === null) { $this->handleFailure($response); } return $identity; } return null; }
public function authenticate($user, $request, $response) { $username = $request->getAuthUser(); $password = $request->getAuthPassword(); if ($this->auth) { if ($username !== null || $password !== null) { $identity = call_user_func($this->auth, $username, $password); if ($identity !== null) { $user->switchIdentity($identity); } else { $this->handleFailure($response); } return $identity; } } elseif ($username !== null) { $identity = $user->loginByAccessToken($username, get_class($this)); if ($identity === null) { $this->handleFailure($response); } return $identity; } return null; }
个人认为没什么好坏之分,根据不同的使用场景使用不同的方法吧
-
xjcallen 东莞
注册时间:2017-01-10
最后登录:2022-06-30
在线时长:6小时36分
最后登录:2022-06-30
在线时长:6小时36分
- 粉丝0
- 金钱175
- 威望0
- 积分235