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

1,584 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

一、登陆api

1.1、创建登陆api控制器

运行命令php artisan make:controller Auth/LoginController在这里插入图片描述 控制器写入一下方法,代码:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;

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 \Illuminate\Http\JsonResponse
     */
    //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 \Illuminate\Http\JsonResponse
     */
    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、创建登陆路由

routes\auth.php文件下创建登陆路由:

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

在这里插入图片描述

1.4、创建登陆表单验证

运行命令:php artisan make:request Auth/LoginRequest 在这里插入图片描述LoginRequest.php写入如下代码:

<?php

namespace App\Http\Requests\Auth;

use App\Http\Requests\BaseRequest;

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
}

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

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。