API 使用 Lumen Framework 授权无效
API with Lumen Framework authorize not work
我用 Lumen 做一个简单的 API,但是我遇到了一个问题。如果他是用户,我想删除用户,但我的授权不起作用。
我使用 JWT 令牌进行登录。
UserController.php
/**
* Delete user by user id.
*
* @param int $id
*
* @return mixed
*/
public function delete($id)
{
$user = User::find($id);
$this->authorize('delete', $user);
$user->delete();
return response()->json([
'success' => 'User deleted with success'
], 200);
}
UserPolicy.php
class UserPolicy
{
public function delete(User $user, User $user_current)
{
return $user->id === $user_current->id;
}
}
AuthServiceProvider.php
public function boot()
{
Gate::policy(User::class, UserPolicy::class);
$this->app['auth']->viaRequest('api', function ($request) {
if ($request->header('Authorization')) {
return User::where('api_token', $request->input('api_token'))->first();
}
});
}
我不明白为什么它不起作用。
尝试在您的 header 中使用如下所示:
Authorization : Bearer [TOKEN]
更新 1:
如果您使用的是 Apache,我想这可能对您有所帮助,因为它适用于我的:
只需在您的 .htaccess 文件中添加这些行:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
更新 2:
好的,请按照以下代码更改您的 AuthServiceProvider:
$this->app['auth']->viaRequest('api', function ($request) {
$token = $request->bearerToken();
if(!$token) {
// Unauthorized response if token not there
throw new Exception('token not provided');
}
.
.
.
}
我用 Lumen 做一个简单的 API,但是我遇到了一个问题。如果他是用户,我想删除用户,但我的授权不起作用。
我使用 JWT 令牌进行登录。
UserController.php
/**
* Delete user by user id.
*
* @param int $id
*
* @return mixed
*/
public function delete($id)
{
$user = User::find($id);
$this->authorize('delete', $user);
$user->delete();
return response()->json([
'success' => 'User deleted with success'
], 200);
}
UserPolicy.php
class UserPolicy
{
public function delete(User $user, User $user_current)
{
return $user->id === $user_current->id;
}
}
AuthServiceProvider.php
public function boot()
{
Gate::policy(User::class, UserPolicy::class);
$this->app['auth']->viaRequest('api', function ($request) {
if ($request->header('Authorization')) {
return User::where('api_token', $request->input('api_token'))->first();
}
});
}
我不明白为什么它不起作用。
尝试在您的 header 中使用如下所示:
Authorization : Bearer [TOKEN]
更新 1:
如果您使用的是 Apache,我想这可能对您有所帮助,因为它适用于我的:
只需在您的 .htaccess 文件中添加这些行:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
更新 2:
好的,请按照以下代码更改您的 AuthServiceProvider:
$this->app['auth']->viaRequest('api', function ($request) {
$token = $request->bearerToken();
if(!$token) {
// Unauthorized response if token not there
throw new Exception('token not provided');
}
.
.
.
}