Yii2.0 搭建 API 授权认证
App 里面一些api请求会需要授权认证后才能访问。过程如下:
1.用户请求登录API(login,这个接口不需要授权),login API校验用户的帐号密码,如果正确并返回一个有效的token给客户端,客户端拿到用户的token,进行保存。 2.对需要授权的API访问的时候,客户端会把这个token(一般是放在header的Authorization字段中)一起发送给这个API。 3.需要授权的API会先校验token的有效性,校验通过,返回客户端需要的信息,校验失败,需要用户重新登录.
我们 Yii2.0 搭建 RESTful API 基础上还要做一些准备工作,也顺便解决一些上篇教程最后留下的问题。
首先我们要对Yii-advanced的默认用户表user添加一个字段access_token
在项目根目录下 终端运行
php yii migrate/create add_access_token_column_to_user_table
在console文件夹下面migrations的文件夹下面多一个数据迁移文件然后编辑如下
<?php use yii\db\Migration; /** * Handles adding columns to table `{{%user}}`. */ class m211119_081455_add_access_token_column_to_user_table extends Migration //add前的日期版本是自动生成的 { public function up() { $this->addColumn('{{%user}}', 'access_token', $this->string()->defaultValue(null)); } public function down() { $this->dropColumn('{{%user}}', 'access_token'); } }
在项目根目录下 终端运行
php yii migrate/up
至此呢,我们添加了access_token字段
我把ApI接收的数据格式改为raw 的json格式
编辑api下的config下main.php
... 'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ], ], ...
关闭user组件的session会话
编辑api下的config下main.php
'user' => [ 'identityClass' => 'common\models\User', 'enableSession' => false, 'enableAutoLogin' => true, 'loginUrl' => null, ],
4.规划一下这次演示的API 顺便把 UrlManager设置了
GET /v1/users/signup-test (测试注册一个用户,给下面两个接口用) POST /v1/users/login 登录接口 (免授权认证) GET /v1/users/profile 登录用户信息接口 (授权认证)
编辑api下的config下main.php
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableStrictParsing' => true, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => ['v1/user'], 'extraPatterns' => [ 'POST login' => 'login', 'GET signup-test' => 'signup-test', 'GET profile' => 'profile', ] ], ] ],
这里做一个小优化,如果rules规则都写在main.php 就会比较臃肿,这里我们专门把路由规则独立一个文件为url-rules.php
<?php /** * url-rules.php * 在这里配置所有的路由规则 */ $urlRuleConfigs = [ [ 'controller' => ['v1/user'], 'extraPatterns' => [ 'POST login' => 'login', 'GET signup-test' => 'signup-test', 'GET profile' => 'profile' ], //....这里可以添加更多的路由规则 ], ]; /** * 基本的url规则配置 */ function baseUrlRules($unit) { $config = [ 'class' => 'yii\rest\UrlRule', ]; return array_merge($config, $unit); } return array_map('baseUrlRules', $urlRuleConfigs);
字main.php中引用
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableStrictParsing' => true, 'rules' => require(__DIR__ . '/url-rules.php'), ],
6. 在通过api路径和url规则,我们需要在 api目录下的modules/v1/controllers/ 下建一个userController.php 可以用gii建,建立modules/v1/models/LoginForm.php 登录接口用(可以把commom/models/ 文件夹下的LoginForm拿过来修改),本来呢common/modles/user.php 也需要移到modules/v1/models/,但是这里只是演示就共用一下不移了。
准备工作做好了,我们就来看一下接口怎么写
更多内容请付费阅读
评论区
请登陆 后评论!