2017-07-20 58 views
0

我知道如果我在数据库中存储jwt令牌,我会失去目的,但由于某种原因,我想存储它,我该怎么做?如何在数据库中存储JWT令牌

控制器

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller; 
use Illuminate\Http\Request; 
use Tymon\JWTAuth\JWTAuth; 

class AuthController extends Controller 
{ 
/** 
* @var \Tymon\JWTAuth\JWTAuth 
*/ 
protected $jwt; 

public function __construct(JWTAuth $jwt) 
{ 
    $this->jwt = $jwt; 
} 

public function postLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required|email|max:255', 
     'password' => 'required', 
    ]); 

    try { 

     if (! $token = $this->jwt->attempt($request->only('email', 'password'))) { 
     $create_token = User::where('user_id', $login->user_id)->update(['token' => $token]); 
      return response()->json(['user_not_found'], 404); 
     } 
     else { 
     $create_token = User::where('user_id', auth()->user()->user_id)->update(['token' => $token]); 
     } 

    } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { 

     return response()->json(['token_expired'], 500); 

    } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { 

     return response()->json(['token_invalid'], 500); 

    } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { 

     return response()->json(['token_absent' => $e->getMessage()], 500); 

    } 

    return response()->json(compact('token')); 
} 

    public function logout(Request $request) 
{ 
    $this->jwt->invalidate($this->jwt->getToken()); 
    return response()->json([ 
     'message' => 'User logged off successfully!' 
    ], 200); 
} 
} 

我尝试了上述方法,但我得到错误说调用未定义功能应用\ HTTP \控制器\ AUTH() 谁能帮助我?

+1

尝试'Auth :: user() - > id'从laravel默认用户表中获取用户ID – Hari

+0

它确实保存了令牌,但是每当我得到新令牌时,我都不更新令牌 – PinballWizard

+0

如果您有'token'那么你不需要访问'postlogin'函数。你可以在令牌更新时更新 – Hari

回答

0

不建议看到json web令牌是时间敏感的,但我写了类似的东西,但使用redis。看看你的代码,我建议你为tokens创建一行并将其添加到public $hidden = ['password','token']。创建用户时,您可以创建一个令牌并将其保存到数据库。