未经授权的laravel 5
Posted
技术标签:
【中文标题】未经授权的laravel 5【英文标题】:Unauthorized laravel 5 【发布时间】:2018-03-30 09:33:20 【问题描述】:我尝试使用 Laravel 的访问策略,但是,我一遍又一遍地收到相同的错误,我看不到我需要在函数或模型中导入和/或使用什么。
首先我向你展示我的 AuthServiceProvider
use Illuminate\Support\Facades\Gate;
use App\User;
use App\Policies\UserPolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as
ServiceProvider;
class AuthServiceProvider extends ServiceProvider
protected $policies = [
User::class => UserPolicy::class,
];
public function boot()
$this->registerPolicies();
//
现在我的用户策略
namespace App\Policies;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserPolicy
use HandlesAuthorization;
public function __construct()
//
public function edit(User $authUser, User $user)
return $authUser === $user;
最后是我的 UsersControllers 的编辑功能
use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\UpdateUserRequest;
public function edit($id)
$user = User::findOrFail($id);
$this->authorize($user);
return view('users.edit', compact('user'));
使用我的 UpdateUserRequest 和授权
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserRequest extends FormRequest
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
return true;
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
return [
'name' => 'required',
'email' => 'required|unique:users,email,'.$this->route('usuario')
];
当我尝试访问它时,它总是告诉我我没有授权,即使我修改了 UserPolicy 的编辑功能。
【问题讨论】:
你已经声明了一个UpdateUserRequest
,但不要在你的控制器动作中使用它。
我这样做了,现在我没有收到错误,但它不会重定向我或继续执行代码,它只是让我留在原来的地方。也许在退货的时候atuhorize带我出去,但它不应该是唯一应该退货的东西?
有什么错误吗? $this->route('usuario')
看起来很可疑
【参考方案1】:
您的授权调用错误。授权方法的第一个参数需要是您尝试授权的操作。所以授权检查的正确代码是:
$this->authorize('edit', $user);
您正在使用身份运算符===
来比较用户模型。喜欢return $authUser === $user;
。
根据php手册:
使用恒等运算符 (===) 时,当且仅当对象变量引用同一类的同一实例时,它们才是相同的。
但是,$authUser
实例和$user
实例是同一模型的不同实例。使用比较运算符==
。
在使用比较运算符(==)时,对象变量的比较方式很简单,即:如果两个对象实例具有相同的属性和值(值与==比较),则它们是相等的,并且是同一个班级。
现在您的用户策略方法将是:
public function edit(User $authUser, User $user)
return $authUser == $user;
【讨论】:
我没有看到添加代码的执行有任何变化。 非常感谢您^^以上是关于未经授权的laravel 5的主要内容,如果未能解决你的问题,请参考以下文章
用户未经授权时的 Laravel 护照自定义错误消息和状态码