laravel+jwt-auth

guard 准备知识

这部分是 laravel guard 的知识

我们在 config/auth 中设置了不同的 guard

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

\Auth::guard ('api') 意思是使用 api guard,根据配置使用的 driver 是 jwt,provider 是 users。

driver jwt 在 jwt-auth 这个扩展中定义了

vendor/tymon/jwt-auth/src/Providers/AbstractServiceProvider.php

 Auth::guard()  用的最多的就是 API 用户登录注册这块了额。

ContractReferences Facade
Illuminate\Contracts\Auth\Guard Auth::guard() 
Illuminate\Contracts\Auth\StatefulGuard~

 

访问指定看守器实例-登录

文档

 

<?php

namespace App\Http\Controllers\Api;

use App\Http\Requests\Api\AuthorizationRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthorizationsController extends Controller
{
    // 用户登录
    public function store(AuthorizationRequest $request)
    {
        $username = $request->username;

        filter_var($username, FILTER_VALIDATE_EMAIL) ?
            $credentials['email'] = $username :
            $credentials['phone'] = $username;

        $credentials['password'] = $request->password;

        if (!$token = Auth::guard('api')->attempt($credentials)) {
            return $this->response->errorUnauthorized('用户名或密码错误');
        }

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

    // 刷新 token
    public function update()
    {
        $token = Auth::guard('api')->refresh();
        return $this->respondWithToken($token);
    }

    // 删除 token
    public function destroy()
    {
        Auth::guard('api')->logout();
        return $this->response->noContent();
    }

    protected function respondWithToken($token)
    {
        return $this->response->array([
            'access_token' => $token,
            'token_type' => 'Bearer',
            'expires_in' => Auth::guard('api')->factory()->getTTL() * 60,
        ]);
    }
}

代码讲解:

  •  $token = Auth::guard('api')->attempt($credentials)  // 访问指定看守器实例 相当于【登录】
  •  Auth::guard('api')->refresh();  // 在前端实现无感刷新 token, 达到长期登录的目的吧
  •  Auth::guard('api')->logout();  // 退出当前登录用户
  •  Auth::guard('api')->factory()->getTTL() * 60  // 设置 token 过期的时间

 

常见用法

1. 为用户生成  token , 通过这个  token  可以获取用户信息

 

Auth::guard('api')->fromUser($user) 

2. 为  token  设置有效期

 Auth::guard('api')->factory()->getTTL() * 60 

这两个知识点在用户注册的时候将会非常有用。

return $this->response->item($user, new UserTransformer())
            ->setMeta([
                'access_token' => Auth::guard('api')->fromUser($user),  // 为 user 生成 token
                'token_type' => 'Bearer',
                'expires_in' => Auth::guard('api')->factory()->getTTL() * 60, // 设置 60 分钟后过期
            ])
            ->setStatusCode(201);1234567

3. 获取当前登录用户的 id

Auth::guard('api')->id();1

3. 获取当前登录用户的 信息

Auth::guard('api')->user();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值