IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 跳坑坑实现laravel的jwt(详细) -> 正文阅读

[PHP知识库]跳坑坑实现laravel的jwt(详细)

跳坑坑,实现laravel的jwt(详细):

首先坑的运行环境
看是nginx 还是apache nginx没有坑,
apache有
用户认证
JWT 完整使用详解:https://laravel-china.org/articles/10885/full-use-of-jwt
在这里插入图片描述
吃亏是福😝😜🤪😝


<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On   #开启rewriteEngine
 
  #!-d的意思是不是目录或目录不存在
  RewriteCond %{REQUEST_FILENAME} !-d
 
  #!-f的意思是不是文件或文件不存在
  RewriteCond %{REQUEST_FILENAME} !-f
 
  #转给index.php处理
  #^(.*)$-匹配所有的路径映射到入口文件 index.php/$1($1为变量1)
  #[QSA]-表示保留参数如get传值?xxx==xx...;
  #[PT]-再把这个URL交给Apache处理;
  #[L]-这是最后一个匹配项,不再往下匹配
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
 
  #增加如下内容
  SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
————————————————
版权声明:本文为CSDN博主「Eleven 弦夜。」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43837229/article/details/101034248

请求时在请这里是列表文本求头上带上Authorization参数:

Authorization:Bearer your_token

但是在认证类中取不到该参数。 解决方法: 在.htaccess文件中加入

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

上流程


1.安装 jwt-auth

composer require tymon/jwt-auth:1.0.0-rc.2

2.输入以下命令,在config下增加一个jwt.php的配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

生成
在这里插入图片描述

3.安装完成后,需要设置一下 JWT 的 secret,这个 secret 很重要,用于最后的签名,更换这个secret 会导致之前生成的所有 token 无效

php artisan jwt:secret

在这里插入图片描述
4.修改 config/auth.php文件,将 api的 driver 改为 jwt

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

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

在这里插入图片描述

5.注册两个 Facade,在config/app.php文件中,添加以下内容

'aliases' => [
        ...
        // 添加门面
        'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth',
        'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory',
],

6.修改app\Models\User.php文件,用user表来生成token

<?php

namespace App\Models;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
.
.
.
    // Rest omitted for brevity

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

7.修改route/api.php文件,为需要的路由加上token(在 Laravel 下,route/api.php 中的路由默认都有前缀 api)

Route::group([

    'prefix' => 'auth'

], function ($router) {

    Route::post('login', 'AuthController@login');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');

});

8.输入以下命令,创建 token 控制器(也可以手动创建类)

php artisan make:controller AuthController
  1. 复制以下内容替换AuthController.php中内容
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
    
        $this->middleware('auth:api', ['except' => ['login']]);//不使用jwt的api
    }

    /**
     * Get a JWT via given credentials.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');
    //密码登录
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
        return $this->respondWithToken($token);
    //手机号登录需要实例
    $userArr = User::where(['phone' => $phone])
            ->where('status', 1)->first();
      $token = auth('api')->login($userArr);
    //手机号注册需要使用这个
         $instertUser = [
            'type_men' => $type_men,
            'phone' => $phone,
            'password' => Hash::make($password),
        ];
        $user = User::create($instertUser);
        return JWTAuth::fromUser($user);
    }

    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(JWTAuth::parseToken()->touser());
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        JWTAuth::parseToken()->invalidate();

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

    /**
     * Refresh a token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(JWTAuth::parseToken()->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => JWTAuth::factory()->getTTL() * 60
        ]);
    }
}

10.使用 Postapi 模拟请求,验证是否能正确获取 token
单个搞定
在这里插入图片描述

可以全局🤩
在这里插入图片描述
还有一个坑:(初学者必看)
在这里插入图片描述
这个位置是需要库中password是Hash加密的

Hash::make($password) 加密
//使用web 在这暂不使用
      $user = AdminUser::where('username', $credentials['username'])
                         ->where('status', 1)
                         ->first();

        if (!$user || !Hash::check($credentials['password'], $user->password)) {
            return error('用户名或密码错误');
        }

降龙十八掌打完收工

加一个小点

$findClass = Classes::where('user_id', $user->id)->first();
 $user = json_decode(json_encode($user, true), true);
 //可以转laravel的对象为数组哦
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:28:31  更:2022-03-21 20:29:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:02:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码