账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效
    77
    0

    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效?
    百度找了一圈都没有..

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 星降临 普通会员 1楼

      在 Laravel 中,你可以使用 JWT(JSON Web Token)来实现用户登录和注销功能。以下是详细的步骤:

      1. 首先,你需要在你的 Laravel 后端配置文件(例如 config/auth.php)中添加 JWT 相关的设置。确保 jwt 是你的应用的默认安全库,例如 app/Providers/JwtServiceProvider.php

      php return new Illuminate\Support\Facades.jwt();

      1. 创建一个注销函数,例如 logout(),并使用 JWT 来确认用户是否已经登录。你需要在 use Illuminate\Support\Facades.jwt(); 部分中添加以下代码:

      ```php public function logout() { // 获取 JWT 的加密令牌 $token = session()->get('jwt_token');

      // 使用 JWT 的加密令牌进行注销
      if (isset($token)) {
          // 在 JWT 的解密令牌中删除对应的用户信息
          $decodedToken = JWT::decode($token, env('JWT_SECRET'), ['HS256']);
          $user = User::where('id', $decodedToken->id)->first();
      
          // 如果用户是活跃的,注销用户
          if ($user) {
              $user->delete();
              // 如果用户是匿名的,清除用户的数据库记录
              if ($user->isGuest) {
                  DB::table('users')->where('id', $user->id)->delete();
              }
          }
      }
      
      // 清除 session 中的 JWT
      session()->忘记('jwt_token');
      

      } ```

      1. 在你的路由中,你需要使用 @auth@guard 注解来实现登录和注销功能。例如:

      ```php Route::group(['middleware' => ['auth']], function () { Route::get('/login', function () { return view('login'); });

      Route::post('/login', function () {
          // 获取 JWT 的加密令牌
          $token = session()->get('jwt_token');
      
          // 如果用户已经登录,返回登录页面
          if (isset($token)) {
              return view('login');
          }
      
          // 如果用户未登录,跳转到登录页面
          return redirect()->route('login');
      });
      
      Route::get('/logout', function () {
          // 清除 JWT
          session()->忘记('jwt_token');
      
          // 清除 session 中的 token
          session()->忘记('token');
      });
      

      }); ```

      1. 在你的应用中,你需要在需要注销登录的页面上调用 logout() 函数。例如,在 login.blade.php 文件中:

      ```html

      @csrf

      ```

      1. 请确保你的应用使用的是 JWT 的密钥,并且你的应用配置了 JWT 的存储方式。例如,你可以使用 Laravel 的 jwt 库来存储 JWT 的加密令牌。
    • 在 Laravel 中,你可以使用 JWT(JSON Web Token)来实现用户登录和注销功能。以下是详细的步骤:

      1. 首先,你需要在你的 Laravel 后端配置文件(例如 config/auth.php)中添加 JWT 相关的设置。确保 jwt 是你的应用的默认安全库,例如 app/Providers/JwtServiceProvider.php

      php return new Illuminate\Support\Facades.jwt();

      1. 创建一个注销函数,例如 logout(),并使用 JWT 来确认用户是否已经登录。你需要在 use Illuminate\Support\Facades.jwt(); 部分中添加以下代码:

      ```php public function logout() { // 获取 JWT 的加密令牌 $token = session()->get('jwt_token');

      // 使用 JWT 的加密令牌进行注销
      if (isset($token)) {
          // 在 JWT 的解密令牌中删除对应的用户信息
          $decodedToken = JWT::decode($token, env('JWT_SECRET'), ['HS256']);
          $user = User::where('id', $decodedToken->id)->first();
      
          // 如果用户是活跃的,注销用户
          if ($user) {
              $user->delete();
              // 如果用户是匿名的,清除用户的数据库记录
              if ($user->isGuest) {
                  DB::table('users')->where('id', $user->id)->delete();
              }
          }
      }
      
      // 清除 session 中的 JWT
      session()->忘记('jwt_token');
      

      } ```

      1. 在你的路由中,你需要使用 @auth@guard 注解来实现登录和注销功能。例如:

      ```php Route::group(['middleware' => ['auth']], function () { Route::get('/login', function () { return view('login'); });

      Route::post('/login', function () {
          // 获取 JWT 的加密令牌
          $token = session()->get('jwt_token');
      
          // 如果用户已经登录,返回登录页面
          if (isset($token)) {
              return view('login');
          }
      
          // 如果用户未登录,跳转到登录页面
          return redirect()->route('login');
      });
      
      Route::get('/logout', function () {
          // 清除 JWT
          session()->忘记('jwt_token');
      
          // 清除 session 中的 token
          session()->忘记('token');
      });
      

      }); ```

      1. 在你的应用中,你需要在需要注销登录的页面上调用 logout() 函数。例如,在 login.blade.php 文件中:

      ```html

      @csrf

      ```

      1. 请确保你的应用使用的是 JWT 的密钥,并且你的应用配置了 JWT 的存储方式。例如,你可以使用 Laravel 的 jwt 库来存储 JWT 的加密令牌。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部