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/,但是这里只是演示就共用一下不移了。
准备工作做好了,我们就来看一下接口怎么写
更多内容请付费阅读
评论区 
            
                                    请登陆 后评论!