我是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."}
作为回应。
奇怪的是,我的本地主机服务器(OS-Windows)上的相同代码工作正常,但是当我在我的托管服务器(OS-ubuntu)上运行此API时,它不起作用。
有人可以帮我解决这个问题吗?这与服务器配置设置有关吗?我甚至无法调试此代码来检查我做错了什么。
提前致谢!!
答案 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));
//
}
}
答案 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设置