授权失败后,laravel不会重定向

时间:2016-10-27 15:14:48

标签: php laravel laravel-5 laravel-5.2

在我的laravel 5.2中的请求文件中,我设置了一个条件来检查用户是否有权获得请求。

代码

<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
use App\questions;
use Auth;
class answerAddRequest extends Request
{
    public function authorize()
    {
        if(questions::where('people_id',Auth::id())->count()==0)
            return true;
        else
        {
            return false;
            return redirect('dashboard');
        }
    }
    public function rules()
    {
        return [
            'answer'=>'required|min:3'
        ];
    }
}

如果我不添加return false它会执行并插入一个新行,这不应该发生,但是使用当前代码,它会显示Forbidden这是正确的,但它没有&#39} ; t重定向到我的仪表板视图。如果授权失败,如何将其重定向到其他页面?

2 个答案:

答案 0 :(得分:1)

request文件中添加名为forbiddenResponse()的方法:

public function forbiddenResponse()
{
    return redirect('dashboard');
}

希望这有帮助!

旁注

此外,您知道DBEloquent有一个名为exists的方法,以节省您必须对您的数据库进行计数检查,以便(如果您愿意)可以写您的authorize方法为:

public function authorize()
{
    return questions::where('people_id', Auth::id())->exists();
}

答案 1 :(得分:0)

您在else块中使用了两个return语句

authorize()

永远无法访问第二个return语句。

<强>更新

如果要重定向用户,则可以创建自定义中间件并编写与<ng-container *ngFor="let star of arrayStarts"> <span class="glyphicon star" aria-hidden="true" [class.glyphicon-star-empty]="activeStar>=star? false : true" [class.glyphicon-star]="activeStar<star ? false : true" (click)="clickStar(star)" (mouseleave)="mouseleaveStar(star)" (mouseover)="mouseoverStar(star)" > </span> </ng-container> 中相同的代码。

在要重定向未授权用户的路由中使用此中间件。