Laravel 5.1 - 在每个页面上重定向特定用户

时间:2015-11-22 14:13:54

标签: routes laravel-5.1 url-redirection

我正在制作一个网站,用户可以在发布之前进行注册。但是,当有特定电子邮件地址的人注册时,他们已经可以访问整个网站,其他人则被列入等候名单。

所以,让我们说拥有gmail地址的每个人都可以访问,我希望其他人可以重定向到页面/等待列表。

示例:

Gmail用户:

Route::get('favorites', 'FavoriteController@index');

Hotmail用户:

Route::get('favorites', 'FavoriteController@index')

- >让这个重定向到

Route::get('waitlist', 'WaitlistController@index')

是否有一种简单,简单的方法可以为每条路线执行此操作,例如使用if,就像这样?

if(substr($user->email, -9)!= "@gmail.com")
{
    always redirect my routes to "Waitlist"
}

2 个答案:

答案 0 :(得分:1)

好的,所以感谢用户@ihue,我知道解决方案。

我必须创建一个middelware,每次输入URL时都会检查用户的电子邮件。

以下是我的表现

我使用

生成了中间件
php artisan make:middleware EmailRedirectMiddleware

然后在中间件中我编写了if循环。

<?php

namespace App\Http\Middleware;

use Auth;
use Closure;

class EmailRedirectMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Auth::User();
        if(substr($user->email, -9) != "@gmail.com")
        {
            return redirect('waitinglist');
        }

        return $next($request);
    }
}

然后只需在您的routes.php中,将中间件用于您想要的每条路线,就像这样。

Route::group(array('middleware' => 'auth'), function(){
    Route::group(array('middleware' => 'App\Http\Middleware\EmailRedirectMiddleware'), function() {
        Route::get('work', 'WorkController@index');
    });
});

第一行检查用户是否已登录,第二行检查登录用户具有的电子邮件。 如果用户未使用Gmail地址,他将重定向到waitinglist,就像我在中间件中编码一样

答案 1 :(得分:0)

您可以在以下功能中更改多用户的用户重定向。  但是如果laravel版本更新,您在此处的更改可能会被取消。

转到文件路径并更改功能

  

vendor \ laravel \ framework \ src \ illuminate \ Foundation \ Auth \ AuthenticatesUser.php

protected function handleUserWasAuthenticated(Request $request, $throttles)
    {
        if ($throttles) {
            $this->clearLoginAttempts($request);
        }

        if (method_exists($this, 'authenticated')) {
            return $this->authenticated($request, Auth::user());
        }

        $user = Auth::user();
        $type = $user->Rtype;

        if($type==1){
            return redirect()->intended('/admin/dashboard');
        }elseif($type==2){
            return redirect()->intended('/admin/dashboard');
        }elseif($type==3){
            return redirect()->intended('/');
        }else{
        return redirect()->intended($this->redirectPath());
        }

    }