如何登录和注销两次使用/(索引)路由?

时间:2016-07-24 00:55:10

标签: php laravel laravel-5 laravel-5.2 laravel-routing

我正在开发一个Laravel项目。该项目有一个公共的(未经过身份验证的网站部分)和一个经过身份验证的部分(管理员)。

我正在尝试使用/ route显示公共主页视图,然后在进行身份验证时,我希望显示管理员身份验证视图的相同/路由。

这是尝试的代码:

routes.php文件

Route::auth();

Route::get('/', function () {
        return view('Public.home');
    });

Route::group(['middleware' => ['auth']], function () { 

    Route::get('/', function () {
        return view('Authenticated.home');
    });
});

问题 当我注销并尝试访问/ route时,公共控制器(Public.home)被视为经过身份验证的路由(位于上面路由组中的' auth'中间件)。

中间件身份验证设置为在访问任何受保护(经过身份验证的)路由时重定向到/。

Authenticate.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Authenticate
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            }

            return redirect()->guest('/');
        }

        return $next($request);
    }
}

我正在使用Laravel 5.2。

1 个答案:

答案 0 :(得分:3)

有几种方法可以解决这个问题。

第一种方法是从make中间件中排除您的('/')路由并编写自己的路由以检查它们是否已登录,并根据该路径返回相应的视图。

这样的事情可以解决问题:

auth

有关编写自己的中间件的更多信息,请参阅相关文档。

或者,您可以创建一个视图public function handle($request, Closure $next) { if (Auth::check()) { //The user is logged in return view('Authenticated.home'); } else { //The user is not logged in return view('Public.home'); } } ,然后使用和('home')语句检查他们是否已登录。

这样的事情可以解决问题:

if