如何在Laravel 5.8中附加授权标头

时间:2019-04-17 12:50:59

标签: php laravel token jwt-auth

我想在我的Laravel中附加Authorization: Bearer {yourtokenhere}。如果在 邮递员我将“授权”放在“标题”选项卡上,并通过编写Bearer {token}来手动赋予令牌值,以便保护特定的路由,但是如何在Laravel源代码中做到这一点?我应该在控制器中做什么或者应该在中间件或内核或其他地方添加其他方法? 这是因为我有{"error":"token_not_provided"}每次访问受jwt.auth middleware保护的路由。

这是我的受保护路线,给我{"error":"token_not_provided"}

Route::group(['middleware' => ['jwt.auth']], function(){
    Route::get('/dashboard', 'AppController@dashboard');
});

这是我在AuthController中的登录方法:

  public function signin(Request $request)
  {
    $this->validate($request, [
      'username' => 'required',
      'password' => 'required'
    ]);
    // grab credentials from the request
    $credentials = $request->only('username', 'password');
    try {
        // attempt to verify the credentials and create a token for the user
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json([
              'error' => 'Invalid Credentials, username and password dismatches. Or username may not registered.',
              'status' => '401'
            ], 401);
        }
    } catch (JWTException $e) {
        // something went wrong whilst attempting to encode the token
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    return response()->json([
      'user_id' => $request->user()->id,
      'token'   => $token
    ]);
  }

1 个答案:

答案 0 :(得分:0)

您可以将其设置为

$request = Request::create(route('abc', 'GET'); $request->headers->set('X-Authorization', 'xxxxx');

有关更多信息,您可以遵循以下stackoverflow答案 How to set headers for forwarded request

如果您使用jwt,甚至可以在url中传递令牌 像www.example.com/post?token=kjdhfkjsffghrueih

就像您说的那样,您需要在AuthAcontroller中进行此设置,然后必须在客户端中进行设置。 首先将该令牌存储在localstorage中,然后将该令牌设置为localstorage中的http调用(我想通过ajax或axios),然后将请求发送至laravel。

要访问ajax调用,您可以使用以下代码

headerParams = {'Authorization':'bearer t-7614f875-8423-4f20-a674-d7cf3096290e'}; //token form localstorage

然后在像这样的ajax中使用它

type: 'get', url: 'https://api.sandbox.slcedu.org/api/rest/v1/students/test1', headers: headerParams,

或者如果您使用axios,则可以通过以下方式进行设置

axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('SecurityKey');