Home PHP Framework ThinkPHP How to use ThinkPHP6 for JWT authentication?

How to use ThinkPHP6 for JWT authentication?

Jun 12, 2023 pm 12:18 PM
thinkphp Certification jwt

JWT (JSON Web Token) is a lightweight authentication and authorization mechanism that uses JSON objects as security tokens to securely transmit user identity information between multiple systems. ThinkPHP6 is an efficient and flexible MVC framework based on PHP language. It provides many useful tools and functions, including JWT authentication mechanism. In this article, we will introduce how to use ThinkPHP6 for JWT authentication to ensure the security and reliability of web applications.

  1. Installing and Configuring the JWT Extension

First, we need to install the JWT extension in our application. It can be installed by adding dependencies in the composer.json file:

{
    "require": {
        "firebase/php-jwt": "^5.0.0"
    }
}
Copy after login

Then run the following command to install it:

composer install
Copy after login

After the installation is complete, we need to configure JWT in the configuration file. Create the jwt.php file in the config directory and add the following content:

<?php
return [
    'key' => 'your-secret-key',
    'alg' => 'HS256',
    'exp' => 7200, // token过期时间,单位秒
];
Copy after login

where "key" is a string used to generate the signature key of the JWT token, and "alg" is the JWT signature algorithm Name, we can choose algorithms such as "HS256", "HS512", "RS256", etc. "exp" is the expiration time of the JWT token, calculated in seconds.

  1. Implementing JWT authentication controller

Next, we need to create a JWT authentication controller to implement JWT authentication. Create the AuthController.php file in the app/controller directory and add the following content:

<?php
namespace appcontroller;

use FirebaseJWTJWT;
use thinkacadeDb;

class AuthController
{
    public function login()
    {
        //在这里处理用户登陆逻辑
        //...
        
        //登陆成功后生成JWT token并返回给客户端

        $secretKey = config('jwt.key'); // 获取JWT生成签名的密钥
        $alg = config('jwt.alg'); // 获取JWT加密算法
        $payload = [
            'sub' => $user->id, // 存储用户ID
            'exp' => time() + config('jwt.exp'), // 设定过期时间
        ];
        $jwt = JWT::encode($payload, $secretKey, $alg); // 生成JWT令牌
        return ['token' => $jwt]; // 返回JWT Token给客户端
    }

    public function dashboard()
    {
        //检查请求中的JWTToken是否有效,并返回用户信息

        $jwtToken = request()->header('Authorization'); // 获取JWT Token
        if (!$jwtToken) {
            // 如果token不存在,直接返回错误信息
            return ['msg' => '未验证身份,请先登录'];
        }
        $jwtInfo = JWT::decode($jwtToken, config('jwt.key'), [config('jwt.alg')]); // 使用JWT解密Token
        $userId = $jwtInfo->sub; // 获取token中存储的用户ID,用来查询用户信息
        $user = Db::table('users')->where('id', $userId)->find(); // 查询用户信息
        if (!$user) {
            // 用户不存在,直接返回错误信息
            return ['msg' => '用户不存在'];
        }
        // 返回用户信息
        return ['username' => $user['username'], 'email' => $user['email']];
    }
}
Copy after login

In the above controller code, we have implemented two functions: one is user login, the other is to obtain user information . During the login process, we generate a JWT token and return it to the client for authentication in subsequent requests. In the dashboard method, we check whether the Authorization header of the request contains the JWT token, and use the JWT to decrypt the token and verify whether the user's identity is valid.

  1. Add JWT authentication middleware

Finally, we need to add a JWT authentication middleware to the application to protect the API interface that requires authentication. Create the JwtAuth.php file in the app/middleware directory and add the following content:

<?php
namespace appmiddleware;

use FirebaseJWTJWT;
use thinkacadeConfig;

class JwtAuth
{
    public function handle($request, Closure $next)
    {
        //检查请求中的JWTToken是否有效

        $jwtToken = $request->header('Authorization'); // 获取JWT Token
        if (!$jwtToken) {
            // 如果token不存在,直接返回错误信息
            return response(['msg' => '未授权的API请求!'], 401);
        }
        try {
            $jwtInfo = JWT::decode($jwtToken, Config::get('jwt.key'), [Config::get('jwt.alg')]); // 使用JWT解密Token
            $request->jwtInfo = $jwtInfo; // 将解密后的JWT信息存储在请求对象中,后续控制器可以使用
            return $next($request); // 继续后续请求处理
        } catch (Exception $e) {
            // JWT Token过期或者解密失败,返回错误信息
            return response(['msg' => 'JWT Token无效或已过期!'], 401);
        }
    }
}
Copy after login

In the above code, we checked whether the Authorization header of the request contains a valid JWT token. If the JWT token is invalid or has expired, we return an Unauthorized HTTP response, otherwise we continue subsequent request processing and store the JWT token's information in the request object for use by subsequent controllers.

Finally, we need to use JWT authentication middleware in the application's routing to protect the API interface that requires authentication. For example, we add the following code in the routes/api.php file:

<?php
use appmiddlewareJwtAuth;

// 需要JWT认证的API接口
Route::get('dashboard', 'AuthController@dashboard')->middleware(JwtAuth::class);
Copy after login

In the above code, we have protected the dashboard method using the JwtAuth middleware to ensure that there are only requests with valid JWT tokens to access it.

Conclusion

In this article, we introduced how to use ThinkPHP6 for JWT authentication to ensure the security and reliability of web applications. We first installed and configured the JWT extension, then implemented the JWT authentication controller and JWT authentication middleware, and finally used the JWT authentication middleware in the routing of the application to protect the API interfaces that require authentication. Through these steps, we can easily implement the JWT authentication mechanism in ThinkPHP6 applications to ensure the security and reliability of web applications.

The above is the detailed content of How to use ThinkPHP6 for JWT authentication?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to run thinkphp project How to run thinkphp project Apr 09, 2024 pm 05:33 PM

To run the ThinkPHP project, you need to: install Composer; use Composer to create the project; enter the project directory and execute php bin/console serve; visit http://localhost:8000 to view the welcome page.

There are several versions of thinkphp There are several versions of thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP has multiple versions designed for different PHP versions. Major versions include 3.2, 5.0, 5.1, and 6.0, while minor versions are used to fix bugs and provide new features. The latest stable version is ThinkPHP 6.0.16. When choosing a version, consider the PHP version, feature requirements, and community support. It is recommended to use the latest stable version for best performance and support.

How to run thinkphp How to run thinkphp Apr 09, 2024 pm 05:39 PM

Steps to run ThinkPHP Framework locally: Download and unzip ThinkPHP Framework to a local directory. Create a virtual host (optional) pointing to the ThinkPHP root directory. Configure database connection parameters. Start the web server. Initialize the ThinkPHP application. Access the ThinkPHP application URL and run it.

Which one is better, laravel or thinkphp? Which one is better, laravel or thinkphp? Apr 09, 2024 pm 03:18 PM

Performance comparison of Laravel and ThinkPHP frameworks: ThinkPHP generally performs better than Laravel, focusing on optimization and caching. Laravel performs well, but for complex applications, ThinkPHP may be a better fit.

Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Nov 22, 2023 pm 12:01 PM

"Development Suggestions: How to Use the ThinkPHP Framework to Implement Asynchronous Tasks" With the rapid development of Internet technology, Web applications have increasingly higher requirements for handling a large number of concurrent requests and complex business logic. In order to improve system performance and user experience, developers often consider using asynchronous tasks to perform some time-consuming operations, such as sending emails, processing file uploads, generating reports, etc. In the field of PHP, the ThinkPHP framework, as a popular development framework, provides some convenient ways to implement asynchronous tasks.

How to install thinkphp How to install thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP installation steps: Prepare PHP, Composer, and MySQL environments. Create projects using Composer. Install the ThinkPHP framework and dependencies. Configure database connection. Generate application code. Launch the application and visit http://localhost:8000.

How is the performance of thinkphp? How is the performance of thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP is a high-performance PHP framework with advantages such as caching mechanism, code optimization, parallel processing and database optimization. Official performance tests show that it can handle more than 10,000 requests per second and is widely used in large-scale websites and enterprise systems such as JD.com and Ctrip in actual applications.

RPC service based on ThinkPHP6 and Swoole to implement file transfer function RPC service based on ThinkPHP6 and Swoole to implement file transfer function Oct 12, 2023 pm 12:06 PM

RPC service based on ThinkPHP6 and Swoole implements file transfer function Introduction: With the development of the Internet, file transfer has become more and more important in our daily work. In order to improve the efficiency and security of file transfer, this article will introduce the specific implementation method of the RPC service based on ThinkPHP6 and Swoole to implement the file transfer function. We will use ThinkPHP6 as the web framework and utilize Swoole's RPC function to achieve cross-server file transfer. 1. Environmental standard

See all articles