Laravel - Passport API集成|错误:{"消息":"未经身份验证。"}

时间:2018-05-30 06:34:47

标签: php laravel-5 laravel-passport

我是Laravel的新手。我刚开始使用this reference link学习Laravel护照集成。

以下是我的路线档案api.php

Route::post('login', 'API\PassportController@login'); // this is working fine
Route::post('register', 'API\PassportController@register'); // this is working fine
Route::group(['middleware' => 'auth:api'], function(){
   Route::post('get-details' , 'API\PassportController@getDetails'); // This is giving me error
});

PassportController.php >> getDetails()功能代码,

/**
 * details api
 *
 * @return \Illuminate\Http\Response
 */
public function getDetails()
{
    $user = Auth::user();
    return response()->json(['success' => $user], $this->successStatus);
}

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

我已按照in the article更新了其余文件。

注册和登录API工作正常,但当我尝试运行/get-details api时,我收到{"message":"Unauthenticated."}作为回应。

在标题中,我传递的值如下, enter image description here

奇怪的是,我的本地主机服务器(OS-Windows)上的相同代码工作正常,但是当我在我的托管服务器(OS-ubuntu)上运行此API时,它不起作用。

有人可以帮我解决这个问题吗?这与服务器配置设置有关吗?我甚至无法调试此代码来检查我做错了什么。

提前致谢!!

6 个答案:

答案 0 :(得分:1)

您是否在标头中传递了api令牌? 如果没有,首先你必须将登录详细信息传递给api并获取api令牌。然后将此令牌传递给您尝试访问的请求。 另一种可能性是你需要运行 如果您的环境从本地更改为实时

,则再次发送Passport安装命令

答案 1 :(得分:1)

你添加了Passport :: routes();在AuthServiceProvider中

<?php

 namespace App\Providers;

 use Laravel\Passport\Passport;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Foundation\Support\Providers\AuthServiceProvider as 
 ServiceProvider;

 class AuthServiceProvider extends ServiceProvider
 {
/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    'App\Model' => 'App\Policies\ModelPolicy',
];

/**
 * Register any authentication / authorization services.
 *
 * @return void
 */
  public function boot()
  {
    $this->registerPolicies();
    Passport::routes();
    Passport::tokensExpireIn(now()->addDays(15));
    //Passport::refreshTokensExpireIn(now()->addDays(30));
    //
   }
}

请参阅此链接 https://medium.com/techcompose/create-rest-api-in-laravel-with-authentication-using-passport-133a1678a876

答案 2 :(得分:1)

在控制器中添加以下行,

public function __construct()
    {
        $this->middleware('auth:api');
    }

而且,请尝试使用以下命令,

php artisan optimize:clear

答案 3 :(得分:0)

auth:api 中间件期望请求通过JSON进入。

它正在传入的请求标头中寻找 X-Requested-With:XMLHttpRequest 。如果找不到它,则会进入 app / Exceptions / Handler 中的未经身份验证的方法,并返回错误。

如果您在请求标头中添加 X-Requested-With:XMLHttpRequest ,则应解决此问题。

答案 4 :(得分:0)

编辑.htaccess文件,可能存在一些配置问题。

RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

答案 5 :(得分:0)

尝试安装软件包laravel-cors并在软件包提供的 allowedHeaders 选项中添加授权标头。

'allowedHeaders' => ['Authorization']

可能是可以解决标题不发送问题。

或者您可能需要更改apache设置