yii2项目实战之restful api授权验证详解
副标题[/!--empirenews.page--]
前言什么是restful风格的api呢?我们之前有写过来介绍其概念以及基本操作。 既然写过了,那今天是要说点什么吗? 这篇文章主要针对实际场景中api的部署来写。 我们今天就来大大的侃侃那些年api遇到的授权验证问题!独家干活,如果看完有所受益,记得不要忘记给我点赞哦。 业务分析我们先来了解一下整个逻辑
本文我们以用户登录,获取用户的个人信息为例进行详细的完整版说明。 以上,便是我们本篇文章要实现的重点。先别激动,也别紧张,分析好了之后,细节部分我们再一步一个脚印走下去。 准备工作
关于上面准备工作的第4点和第5点,我们贴一下代码方便理解 [ 'user' => [ 'identityClass' => 'commonmodelsUser','enableAutoLogin' => true,'enableSession' => false,],'urlManager' => [ 'enablePrettyUrl' => true,'showScriptName' => false,'enableStrictParsing' => true,'rules' => [ [ 'class' => 'yiirestUrlRule','controller' => ['v1/user'],'extraPatterns' => [ 'POST login' => 'login','GET signup-test' => 'signup-test',] ],] ],// ...... ],signup-test操作我们后面添加测试用户,为登录操作提供便利。其他类型的操作后面看需要再做添加。 认证类的选择我们在 校验用户权限我们以 { return ArrayHelper::merge (parent::behaviors(),[ 'authenticator' => [ 'class' => QueryParamAuth::className() ] ] ); } 如此一来,那岂不是所有访问user的操作都需要认证了?那不行,客户端第一个访问login操作的时候哪来的token, 这样login操作就无需权限验证即可访问了。 添加测试用户为了避免让客户端登录失败,我们先写一个简单的方法,往user表里面插入两条数据,便于接下来的校验。 UserController增加signupTest操作,注意此方法不属于讲解范围之内,我们仅用于方便测试。 generateAuthKey(); $user->setPassword('123456'); $user->username = '111'; $user->email = '111@111.com'; $user->save(false);return [ 如上,我们添加了一个username是111,密码是123456的用户 登录操作假设用户在客户端输入用户名和密码进行登录,服务端login操作其实很简单,大部分的业务逻辑处理都在 use apimodelsLoginForm; 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,再来看看登录的具体逻辑的实现 新建apimodelsLoginForm.PHP use Yii;use yiibaseModel; use commonmodelsUser; /**
private $_user; const GET_API_TOKEN = 'generate_api_token'; public function init () /**
/**
(编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |