2017-01-26 3 views
1

Я пытаюсь реализовать аутентификацию с использованием Laravel 5.3 и Angular 2 с JWT.Lavarel 5.3 и JWT. Я получаю {"error": "token_not_provided"} для всех маршрутов получения

Auth часть работает, и я в состоянии получить маркер, но я пытаюсь nagivate любых получить маршруты, я получаю сообщение об ошибке

Кодекса

I добавил поставщик и псевдонимы, а также общественности папки поставщиков и генерироваться ключ JWT

в моем ядре я добавил следующее:

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, 
'jwt.refresh' => \TymonJWTAuth\Middleware\RefreshToken::class, 

и отключили csrfToken.

Это мои маршруты

Route::resource('authenticate', 'AuthController', ['only' => ['index']]); 
Route::post('authenticate', '[email protected]'); 
Route::post('logout', '[email protected]'); 

И мой AuthController

class AuthController extends Controller 
{ 

    public function __construct() 
    { 
     // Apply the jwt.auth middleware to all methods in this controller 
     // except for the authenticate method. We don't want to prevent 
     // the user from retrieving their token if they don't already have it 
     $this->middleware('jwt.auth', ['except' => ['authenticate']]); 
    } 

    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     // Get all roles 
     $users = User::with('role', 'branch')->get(); 

     // Send the response 
     return response()->json([ 
       'users' => $users 
      ], 200); 
    } 

    // Authentification 
    public function authenticate(Request $request) 
    { 

     // Retrieve email 
     $email    = $request->input('email'); 

     $credentials = $request->only('email', 'password'); 

     try { 
      // verify the credentials and create a token for the user 
      if (! $token = JWTAuth::attempt($credentials)) { 
       return response()->json(['error' => 'invalid_credentials'], 401); 
      } 
     } catch (JWTException $e) { 
      // something went wrong 
      return response()->json(['error' => 'could_not_create_token'], 500); 
     } 

     // Retrieve user 
     $user = User::where('email', '=', $email)->first();   

     // if no errors are encountered we can return a JWT 
     return response()->json(compact('token')); 

     // return response()->json([ 
     //  'user' => $user, 
     //  'token' => compact('token') 
     // ], 200); 

    } 

    // Logout 
    public function logout(Request $request) 
    { 
     $this->validate($request, [ 
      'token' => 'required' 
     ]); 

     JWTAuth::invalidate($request->input('token')); 
    } 

} 

Как я сказал, я мог бы получить маркер после аутентификации, но когда я использую этот маркер, чтобы перейти к некоторому маршруту, как это одна:

Route::resource('authenticate', 'AuthController', ['only' => ['index']]); 

Я получаю этот результат:

{ 
    "error": "token_not_provided" 
} 

enter image description here

ответ

0

Если ваш веб-сервер Apache. Вам нужно добавить

RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 

в файл Htaccess в /path/to/project/public/.htaccess.

Это часто является причиной этой ошибки. Проверьте эту ссылку для получения дополнительной информации. https://github.com/tymondesigns/jwt-auth/wiki/Authentication