jwt-auth之三--Auth认证

此文章为 jwt的安装与使用 https://blog.csdn.net/yt_php/article/details/86354133 的续篇
说明:仍是按照文档
auth的认证,
一是判断登陆状态(auth),如未登陆则被拦截,然后转交给登陆模块,这需要一个中间件来完成。
二是管理登陆,即登陆逻辑login,登陆成功则发送给用户一个授权token;及logout退出登陆,销毁token;忘记密码forgetPassword;注册signUp等。这需要一个专门的控制器来完成,在这里编写自定义逻辑。
在这之前,请阅读文档,一些配置略过。

1,创建Auth控制器

php artisan make:controller Api\V1\AuthController

然后只需从文档的example复制粘贴

namespace App\Http\Controllers\Api\V1;

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

class AuthController extends Controller
{
	//登陆
	public function login()
	{
		$credentials = request(['email', 'password']);
		//$credentials = request(['mobile', 'password']);

		if (! $token = auth()->attempt($credentials)) {
			return response()->json(['error' => '用户名密码错误'], 401);
		}

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

	//注册
	public function signUp( Request $request ) {
		$post = $request->all();
		//...验证
		$user = User::create($post); //创建用户
		$token = auth()->login($user); //登陆
		return $this->respondWithToken($token);
	}

	//忘记密码
	public function forgetPassword( Request $request ) {
		//$user = .. 更改密码逻辑
		//$user->save()
		//$token = auth()->login($user);
		//return Y::json($this->respondWithToken($token));
	}

	//me
	public function me(  ) {
		$user  = auth()->user()->toArray();
		//$user['']=... 自定义逻辑
		return response()->json($user);
	}

	//退出登陆
	public function logout()
	{
		auth()->logout();
		//User::clearCache(auth()->id(), false); //如果对用户信息做了缓存,这里清除
		return response()->json(['message' => 'Successfully logged out']);
	}

	//刷新token
	public function refresh()
	{
		return $this->respondWithToken(auth()->refresh());
	}

	//生成token
	protected function respondWithToken($token)
	{
		return response()->json([
			//'username'     =>auth()->user()->username,
			'access_token' => $token,
			'token_type' => 'bearer',
			'expires_in' => auth()->factory()->getTTL() * 60
		]);
	}
}

当然不要忘了添加对应的路由

Route::group(
	['prefix'=>'v1','namespace'=>'V1'],
	function(){
		
		Route::prefix('auth')->group(function () {
			Route::post('login', 'AuthController@login');
			Route::post('signUp', 'AuthController@signUp');
			Route::post('forgetPassword', 'AuthController@forgetPassword');
			Route::get('logout', 'AuthController@logout');
			Route::get('refresh', 'AuthController@refresh');
		});
		
	}
);

2,测试

使用postman工具

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

因为我们的注册逻辑并没有写,所以手动在users表中,添加email=123456@163.com,password= Hash::make(123456);
在这里插入图片描述

这里jwt组件的使用就算完成了。之后的每次请求,携带上access_token。
复制刚刚的access_token

在这里插入图片描述


在这里插入图片描述

3,第二部分,回到文章开头的中间件部分。

文档中是这么写的

public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

但也可以用专门的中间件来完成,易管理和扩展。

php artisan make:middleware ApiAuth

在这里插入图片描述


在这里插入图片描述

编写中间件

public function handle($request, Closure $next)
{
        $auth = auth();
        $auth->shouldUse('api');
        if ($request->is(...$this->except) || ($auth->check() && $auth->user()->status == 1)) {
            return $next($request);
        }
       return response()->json(['code'=>401,'message' => '用户验证失败,请重新登录']);
}
protected $except = [
        'v1/auth/login', //登陆
        'v1/auth/signUp', //注册
        'v1/sendSms', //发送邮件
        'v1/test/*', //测试
    ];

这里除了判断登陆,还对当用户是否被禁用状态的判断。并且添加了不需要验证的路由。

注册中间件
在这里插入图片描述

使用中间件
在这里插入图片描述

测试:

刚刚我退出了登陆,下面请求forgetPassword方法。
在这里插入图片描述


在这里插入图片描述

end

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值