无法从 laravel 5 应用程序中的请求中解析 jwt 令牌

Posted

技术标签:

【中文标题】无法从 laravel 5 应用程序中的请求中解析 jwt 令牌【英文标题】:jwt token could not be parsed from the request in laravel 5 application 【发布时间】:2016-02-19 09:27:48 【问题描述】:

我正在为我的应用开发基于令牌的授权。我正在关注 -

https://www.codetutorial.io/laravel-and-angularjs-token-based-auth-part1/

我设置了一个不同的前端文件夹,laravel 作为后端。

用户可以注册,并且凭据确实保存在数据库中,但是当我需要创建 jwt 令牌时,出现错误:-

Tymon\JWTAuth\Exceptions\JWTException' with message '
The token could not be parsed from the request

RegisterController.php

class RegisterController extends Controller

public function register(Request $request)

    $newuser= $request->all();
    $password=Hash::make($request->input('password'));

    $newuser['password'] = $password;
    return Register::create($newuser);


登录控制器.php

class LoginController extends Controller


public function authenticate(Request $request)
    $credentials = $request->only('email', 'password');
    try
        if(! $token = JWTAuth::attempt($credentials))
            return response()->json(['error' => 'invalid_credentials'], 401);
        
    
    catch(JWTException $e)
        return response()->json(['error' => 'could_not_create_token'], 500);
    

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


public function getAuthenticatedUser()

    try
        if(! $user = JWTAuth::parseToken()->authenticate())
            return response()->json(['user_not_found'], 404);
        
    
    catch(Tymon\JWTAuth\Exceptions\TokenExpiredException $e)
        return response()->json(['token_expired'], $e->getStatusCode());
    
    catch(Tymon\JWTAuth\Exceptions\TokenInvalidException $e)
        return response()->json(['token_invalid'], $e->getStatusCode());
    
    catch(Tymon\JWTAuth\Exceptions\JWTException $e)
        return response()->json(['token_absent'], $e->getStatusCode());
    

    return response()->json(compact('user'));

routes.php

Route::post('/api/register', 'RegisterController@register');
Route::post('api/authenticate', 'LoginController@authenticate');
Route::get('api/authenticate/user', 'LoginController@getAuthenticatedUser');

我没有发现任何问题,它应该可以正常工作,但不明白问题出在哪里。

【问题讨论】:

尝试使用这个github.com/lcobucci/jwt,我觉得更简单和可定制 你删除了VerifyCsrfToken中间件吗? @pespantelis - 我在 kernal.php 中评论它 - /*\App\Http\Middleware\VerifyCsrfToken::class,*/ 错误出现在哪条路径上? @Hicask - api/authenticate/user 【参考方案1】:

我终于通过将我的 .htaccess 文件更新为来解决了这个问题

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.+)$ /index.php/$1 [L]

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

【讨论】:

刚刚做了。谢谢:-)

以上是关于无法从 laravel 5 应用程序中的请求中解析 jwt 令牌的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 IoC 容器在使用方法注入时无法解析上下文绑定

我无法从 laravel 中的输入值中获取请求值

如何动态更改/解析 Laravel 5 中的数据库连接?

如何从 Laravel 5 中的请求中检索 url 参数?

在 forge 上安装 Laravel 5.2 时出错

如何在 Laravel 5.2 中手动发送密码重置请求?