【问题标题】:Laravel 8 returns 403 UNAUTHORIZED ACCESSLaravel 8 返回 403 UNAUTHORIZED ACCESS
【发布时间】:2021-02-24 05:31:21
【问题描述】:

我正在使用 Laravel 8,并且我有一个名为 Profile 的资源控制器。在这个控制器中,用户可以编辑他们的用户配置文件信息。

所以在edit 方法中,我放了这个:

public function edit(User $user)
{
    $this->authorize('edit-user', $user);
        
    return view('editprofile', compact('user'));
}

用户可以通过这个按钮访问editprofile刀片:

<a href="{{ route('profile.edit' , ['profile' => Auth::user()->id]) }}" class="btn">Edit Profile</a>

但现在的问题是,它返回了这个:

403 此操作未经授权。

但是我已经登录了,我想访问我自己的 profile.edit 而不是其他用户!

所以如果你知道我为什么会收到这个错误,请告诉我,我非常感谢你们的任何想法或建议......

谢谢。

这也是我的路线:

Route::middleware('auth')->group(function() {
    Route::resource('profile' , ProfileController::class);
});

UDPATE 1:

【问题讨论】:

  • $this-&gt;authorize('edit-user', $user); 这不起作用我想你可以添加你的策略代码吗?
  • 你可以试试这个User $profile

标签: php laravel acl laravel-8


【解决方案1】:

请更改以下内容

  • 路由参数名称是“profile” 所以,控制器方法参数必须是相同的“$profile”。

public function edit (Request $request, User $profile) {
    Gate::allows('edit-user', $profile);

    // do the logic
}

【讨论】:

  • 你能告诉我怎么做吗?
  • @POOYAA 你能说出你是如何实现认证的吗?是会话吗?您是否在网络组中启用了会话中间件?
  • 可能是会话中间件没有启用。您正在对前一个控制器进行授权,并且它没有像下一个请求一样保留在应用程序中,它没有显示。你能执行这个并告诉我用户是否在编辑方法中进入 dd($request->user()) 吗?
  • 我只是使用 kernel.php 中的默认 auth 中间件在未登录的情况下将用户重定向回登录页面
  • 我在public function edit(Request $request,User $user) 方法中添加了$request-&gt;user();,它打印出空白屏幕!
【解决方案2】:

我有同样的错误。我变了

public function authorize()
    {
        return false;
    }

public function authorize()
    {
        return true;
    }

App\Http\Requests\StoreProductRequest

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 2023-01-20
    • 2019-11-07
    • 2021-03-12
    • 1970-01-01
    • 2022-11-17
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多