laravel登陆、退出登陆、刷新token的api编写

一、登陆api

1.1、创建登陆api控制器

运行命令php artisan make:controller Auth/LoginController:

控制器写入一下方法,代码:

<?php

namespace AppHttpControllersAuth;

use AppHttpControllersBaseController;
use IlluminateHttpRequest;

class LoginController extends BaseController
{
    /**
     * 登陆
     */
    public function login()
    {
        $credentials = request([email, password]);

        if (!$token = auth(api)->attempt($credentials)) {
            return $this->response()->errorUnauthorized();
        }

        return $this->respondWithToken($token);
    }

    /**
     * Get the authenticated User.
     * 获取个人信息
     * @return IlluminateHttpJsonResponse
     */
    //public function me()
    //{
    //    return response()->json(auth(api)->user());
    //}

    /**
     * 退出登陆
     */
    public function logout()
    {
        auth(api)->logout();

        return response()->json([message => Successfully logged out]);
    }

    /**
     * Refresh a token.
     * 刷新token
     * @return IlluminateHttpJsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth(api)->refresh());
    }

    /**
     * 格式化返回
     */
    protected function respondWithToken($token)
    {
    	// 方法一
        return response()->json([
            access_token => $token,
            token_type => Bearer,
            expires_in => auth(api)->factory()->getTTL() * 60
        ]);
		// 方法二
        // return $this->response()->array([
        //     access_token => $token,
        //     token_type => Bearer,
        //     expires_in => auth(api)->factory()->getTTL() * 60
        // ]);
    }
}

1.2 修改token过期时间

在config/jwt.php中找到

再去.env配置环境中配置JWT_TTL,默认为一小时:

1.3、创建登陆路由

在routesauth.php文件下创建登陆路由:

// 登陆
        $api->post(login, [LoginController::class, login]);

1.4、创建登陆表单验证

运行命令:php artisan make:request Auth/LoginRequest

在LoginRequest.php写入如下代码:

<?php

namespace AppHttpRequestsAuth;

use AppHttpRequestsBaseRequest;

class LoginRequest extends BaseRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            email => required|email ,
            password => required|min:6|max:16,
        ];
    }
}

修改LoginController.php中登陆控制器,使用我们验证的request:

效果:

二、退出登陆api

2.1 退出登陆路由

// 退出登陆,(前提在登陆后才需要退出登陆)
$api->post(logout, [LoginController::class, logout]);

三、刷新token

3.1、刷新token路由

// 刷新token
$api->post(refresh, [LoginController::class, refresh]);

四、编写文档

在showdoc里去编写我们写的接口文档:

##### 简要描述

- 用户注册接口

##### 请求URL
- `/api/auth/register `
  
##### 请求方式
- POST 

##### 参数

|参数名|必选|类型|说明|
|:----    |:---|:----- |-----   |
|name |是  |string |用户名 最大长度16  |
|email     |是  |string | 邮箱  邮箱格式  |
|password |是  |string | 密码 最小长度6 最大长度16   |
|password_confirmation  |是  |string | 确认密码 和密码一样   |


##### 返回示例 
- 状态码 201 创建成功

- 状态码 422 参数错误
{
    "message": "The given data was invalid.",
    "errors": {
        "name": [
            "名称 不能为空。"
        ],
        "email": [
            "邮箱 不能为空。"
        ],
        "password": [
            "密码 不能为空。"
        ]
    },
    "status_code": 422
}

以后写的其他接口也类似这样去写接口文档,接口文档是很重要的,方便前端去对接,也方便自己查阅,不要忽略了,这边写个例子,以后不在赘述。

经验分享 程序员 微信小程序 职场和发展