Laravel 5.3 和智威汤逊。对于所有获取路线,我都会收到 "error": "token_not_provided"

Posted

技术标签:

【中文标题】Laravel 5.3 和智威汤逊。对于所有获取路线,我都会收到 "error": "token_not_provided"【英文标题】:Laravel 5.3 and JWT. I'm getting "error": "token_not_provided" for all get routesLaravel 5.3 和智威汤逊。对于所有获取路线,我都会收到 "error": "token_not_provided" 【发布时间】:2017-06-11 22:22:33 【问题描述】:

我正在尝试使用 Laravel 5.3 和 Angular 2 和 JWT 来实现身份验证。

Auth 部分正在工作,我能够获取令牌,但我正在尝试导航到任何获取路线,但出现错误

代码

我已经添加了提供者和别名,以及公开了供应商文件夹并生成了 jwt 的密钥

在我的内核中我添加了这个:

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

并已禁用 csrfToken。

这些是我的路线

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

还有我的 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

【问题讨论】:

【参考方案1】:

如果您的网络服务器是 apache。你需要添加这个

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

/path/to/project/public/.htaccess 中的 htaccess 文件。

这通常是导致此错误的原因。检查此链接以获取更多信息。 https://github.com/tymondesigns/jwt-auth/wiki/Authentication

【讨论】:

以上是关于Laravel 5.3 和智威汤逊。对于所有获取路线,我都会收到 "error": "token_not_provided"的主要内容,如果未能解决你的问题,请参考以下文章

LARAVEL 5.3,获取用户名和角色名(使用 Laravel 模型关系)

如何使用获取参数将 laravel (5.3) 路由重定向到其他路由

Laravel 5.3 - 如何记录页面上的所有查询?

如何使用 Request $request 从 url 获取 id? (Laravel 5.3)

Laravel 5.3 查询从通过外键连接的 4 个表中获取结果

如何在 Laravel 5.3 中获取当前的语言环境