简体   繁体   中英

Laravel Registration Redirect based on Roles

I have a vendor and customer in login, It works fine and redirects to the vendor or customer dashboard but how can I do the same after registration?

Register Controller

protected $redirectTo = '/';

Login Controller

<?php

public function login(Request $request)
{
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required|min:6',
    ]);

    if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1, 'role_id' => 2], $request->remember)) {
        return redirect()->intended(route('customer.dashboard'));
    } elseif (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1, 'role_id' => 1], $request->remember)) {
        return redirect()->intended(route('vendor.dashboard'));
    }

    return redirect()->back()->withInput($request->only('email', 'remember'));
}

Not sure which version you are using I'm posting my answer for Laravel 5.7+

After registration Laravel call this method:

// Auth\RegisterController
/**
 * The user has been registered.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function registered(Request $request, $user)
{
    // Assign role to $user. Then you can add condition.
    if($user->hasRole('admin'){
       return redirect()->route('xxx');
    }

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

Hope it can help you. Good Luck!

You can try something like this instead

<?php 

public function login (Request $request) {

    $this->validate($request,[
            'email'=>'required|email',
            'password'=>'required|min:6',
        ]);

    $authenticated = Auth::guard('web')->attempt(['email'=>$request->email,'password'=>$request->password], $request->remember));

        if (!$authenticated) {
            return redirect()->back()->withInput($request->only('email','remember'));
        }

        // We already have a auth user

        $redirectRoute = $this->determineBackendRoute();

        return redirect()->intended(route($redirectRoute));

}

/**
 * Determine currently authenticated users destination backend
 * */
public function determineBackendRoute () {

    $role = auth()->user()->role_id;

    switch ($role) {
        case '1':
            $route = 'vendor.dashboard';
            break;

        case '2':
            $route = 'vendor.dashboard';
            break;

        default:
            $route = 'home';
            break;
    }

    return $route;
}

Overwrite the authenticated method in LoginController

 protected function authenticated(Request $request, $user)
    {
        //write your logic's here 

         if ($user->role_id == 1) {
            return redirect()->route('write the route name');
        }

        return redirect('/home');
    } 

Do something like this:

protected $redirectTo = '/user/home';

If based on usertype, do a condition statement that changes the value of $redirectTo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM