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 用户登录注册这块了额。

Contract References 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();
发布了6 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/manbudezhu/article/details/90272639