如果用户未使用中间件进行身份验证,则Laravel 5.4将重定向到特定页面

时间:2017-04-25 09:45:03

标签: laravel redirect routing

我想将用户(如果未经过身份验证)重定向到我的索引页面(这是登录页面)

似乎无法使其正常工作,我真的对路由感到困惑。

  

的HomeController

class HomeController extends Controller
{

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return redirect()->guest('/');
    }
}
  

路由

// Index
Route::get('/', [
    'as' => 'index',
    'uses' => 'UserController@index'
]);
  

UserController中

您看到的路由重定向到用户控制器索引功能,如下所示:

*有 __ construct()所以它使用了中间件' auth'。

public function __construct()
{
    $this->middleware('auth');
}

public function index(){

    // If user is logged
    if(Auth::check()) {

        // If user has NOT submitted information form redirect there, otherwise to categories
        if(!Auth::user()->submitted_information)
            return redirect()->route('information');
        else
            return redirect()->route('categories');
    }
    else
        return view('index', ['body_class' => 'template-home']);

}
  

Handler.php

auth中间件中的未经身份验证的功能(Exceptions / Handler.php)

 protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        return redirect()->route('index');
    }

我现在得到的错误如下:

InvalidArgumentException in UrlGenerator.php line 304:
Route [index] not defined.

由于

行而发生此错误

return redirect()->route('index');在上面未经身份验证的函数中。

我在这里缺少什么?如果您需要更多信息,请随时提出。

编辑:到目前为止,如果我从 UserController 中移除__construct()方法,并在web.php中插入所有路由middleware 1}}使用,它的工作原理。

例如

Route::get('/categories', [
    'as' => 'categories',
    'uses' => 'UserController@showCategories'
])->middleware('auth');

但我试图在没有指定使用什么中间件的情况下自动使用它。

3 个答案:

答案 0 :(得分:3)

按照以下代码构建您的路线:

data:image/bmp;....

路由:: get('/ mypage','HomeController @ mypage');

打开您的中间件类名为RedirectIfAuthenticated,然后处理fucntion 你在下面写下代码:

Route::group(['middleware' => ['auth']], function() {
     // uses 'auth' middleware
     Route::resource('blog','BlogController');
});

希望它对你有用。

答案 1 :(得分:1)

您的路线应该像

//索引

class Utility {
static void alertDialogShow(Context context, String title, String message) {
    final AlertDialog alertDialog = new AlertDialog.Builder(context).create();
    alertDialog.setTitle(title);
    alertDialog.setMessage(message);
    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    alertDialog.show();
}

enter image description here了解有关路由的详情。

答案 2 :(得分:1)

尝试

Route::get('/','UserController@index',['middleware'=>'auth'])->name('index);