Api用户登录注册用户信息获取

发布于 2019-06-11  72 次阅读


Api用户登录注册用户信息获取

上篇实现了TP5.1的使用JWT
现在我们就用JWT来编写一下登录逻辑 以及 用户信息获取

创建api/users控制器

php think make:controller api/Users


目录下:

路由

我们使用RESTful风格

登录 POST /authorizations

注册 POST /users

获取个人信息 GET /me

确定好路由我们就可以开始编写相关的业务逻辑了
在此之前请下载postman
我们需要用此工具模拟HTTP请求
./route/route.php

.
.
.
//注册
Route::post('users','api/users/create');
//登录
Route::post('authorizations','api/users/store');
//查询个人信息
Route::get('/me','api/users/me');

创建User模型

php think make:model User


目录下:

注册

这里就简单的注册吧 也不弄验证码什么的了
涉及知识点验证器 模型
在编写业务逻辑之前我们先新建验证器来验证用户提交的信息
比如username的长度

php think make:validate api/UserValidata


目录下:

application\api\validate\UserValidate.php

<?php

namespace app\api\validate;

use think\Validate;

class UserValidate extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */ 
    protected $rule = [
        'username' => 'require|length:2,10|unique:users',
        'password' => 'require|length:6,20',
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */ 
    protected $message = [
        'username.require' => "用户名必须填写",
        'username.length' => "用户名必须在2到10个字符",
        'username.unique' => "用户名已存在",
        'password.require' => "密码必须填写",
        'password.length' => "密码必须在8到20个字符"
    ];
}
  • 更多规则自己去加吧,这里简单演示一下...
    application\api\controller\Users.php
<?php

namespace app\api\controller;

use think\Controller;
use app\api\validate\UserValidate;
use app\common\model\User;

class Users extends Controller
{
    public function create()
    {
        $validata = new UserValidate();
        $data = $this->request->only(['username','password']);
        if(!$validata->check($data))
            return json($validata->getError())->code(400);
        //由于我在数据库迁移的时候并没有给introduction可以为null,所以给个默认值
        $data = array_merge($data,['introduction'=>"我的介绍...我是菠萝"]);
        User::create($data);
        return response()->code(201);
    }
}

然后我们打开postman去测试一下


成功返回了201状态码
并且数据库添加了正确的数据:

记得自己写的时候密码记得加密 不明文
测试其他的几种情况

还有一个问题...就是没有返回规范的格式这里只是简单返回了文本
application\api\controller\Users.php

.
.
.
 if(!$validata->check($data))
            return json([
                "message" => $validata->getError()
            ])->code(400);
.
.
.


还是好热爱web开发