我已经使用laravel 5.3创建了一个应用程序,它在localhost上工作正常,但在我将所有代码上传到服务器上之后,我遇到了这个错误:
Symfony\Component\HttpKernel\Exception\HttpException in /home/project/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php line 133: This action is unauthorized.
当我尝试使用post调用控制器中的函数时,会发生这种情况。
这是一个例子:
路线
Route::group(['middleware' => 'auth'], function () {
Route::group(['middleware' => 'admin'], function () {
Route::post('admin/store/', 'Admin\AnnouncementController@store');
});
});
控制器
protected function store(AnnouncementRequest $request) {
return Auth::user()->id;
}
我该如何解决这个问题?为什么这不会发生在我的本地主机上?
提前致谢。
答案 0 :(得分:37)
检查您的AnnouncementRequest
文件是否设置为从授权功能返回true。默认为返回false。
答案 1 :(得分:1)
嗯,就我所看到的,这种情况可能会有很多情况。就我而言,我使用的是名为 AnnouncementRequest 的自定义FormRequest。在该类中,我正在检查auth用户的角色属性。
// before
public function authorize() {
if(Auth::user()->role_id === 1) {
return true;
}
return false;
}
我的错误是使用===而不是==进行验证。因此,在确定一切正常工作之后。
// after
public function authorize() {
if(Auth::user()->role_id == 1) {
return true;
}
return false;
}
无论如何为什么它在localhost上运行但是在服务器上没有对我来说仍然是一个谜......
答案 2 :(得分:1)
默认函数返回false,因此如下所示进行更改
public function authorize()
{
return true;
}
或者也可以在请求中使用Auth
use Illuminate\Support\Facades\Auth;
public function authorize()
{
return Auth::check();
}
答案 3 :(得分:0)
authorize()函数默认返回false, 返回true,您的问题将得到解决
答案 4 :(得分:0)
在您的请求文件中,默认不启用授权
public function authorize()
{
return false;
}
如果您在此处启用请求文件并显示该代码。
public function authorize()
{
return true;
}
答案 5 :(得分:0)
如果您可以使用CustomRequest方法进行验证,请确保 您的authorize()返回true。如果可以设置为false,则它永远不会调用 您的函数也抛出错误 此操作未经授权
解决方案
class CopyRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true; //Default false .Now set return true;
}
}