angular - Laravel 中间件授权问题
问题描述
我想简要描述一下我到目前为止所做的事情以及问题到底是什么,希望你能帮助我。
我有一个以 Angular 作为前端的 Laravel 8 后端。在我的应用程序中,我发送了一个 API,以便用户可以查询他自己的数据并对其进行修改,例如他的姓名和电子邮件。
例如,我的想法是有一条路线.../user/1
,我在其中传递当前登录用户的 ID。但这里的问题是:如果我重新输入1到2就像.../user/2
我可以访问其他用户的个人资料并可以修改和删除他的数据一样。这将是一个大问题,我想尝试使用中间件来不允许未经授权访问其他配置文件。
所以我在我的api.php中尝试了:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
// Get Specific User
Route::get('user/{id}' ,'App\Http\Controllers\UserController@getUserById')->middleware(['auth', 'ResourceOwner']);
获取特定用户的 ID。为此,我创建了一个中间件ResourceOwner并在其中具有以下功能:
class ResourceOwner
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->id !== auth('api')->user->id) {
abort(403);
}
return $next($request);
}
并在受保护的 $routeMiddleware下的Kernel.php 中对其进行初始化,如下所示:'ResourceOwner' => \App\Http\Middleware\ResourceOwner::class,
现在真正的问题是:我现在根本无法访问数据,无论是否登录。不幸的是,我收到错误 401(未经授权)。我使用Tymon/jwt-auth 包。.
你们有什么想法我在这里错过或做错了吗?我会很高兴得到答案并非常感谢。
解决方案
推荐阅读
- javascript - Javascript await 是保留字吗?
- powershell - 检查大型 csv 文件以匹配 ID 需要很长时间
- docker - 如何将 docker run 参数传递给 docker-compose.yml
- python - 在烧瓶应用程序中设置和检索环境变量
- ruby - 为什么 Ruby 在不同年份返回不同的时区?
- google-bigquery - 如何在加载到 Bigquery 时修复“未找到:文件 /bigstore/project/testing/filename.json”错误
- python - 如何在 python 中定义类并继承 COM 对象属性?
- ruby-on-rails - 输入标签放在引号内并呈现为字符串
- google-api - 为 Google API Key 添加限制
- postman - 邮递员:如何验证响应是否具有正确的日期格式