首页 文章

Laravel - 多重身份验证

提问于
浏览
1

我需要创建三个身份验证:user,admin,restUser . 我设法为用户和管理员创建多个登录,但是当尝试为restUser添加登录时,它返回用户表单...

这是我的代码:

app/Teretaneusers.php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Teretaneusers extends Authenticatable
{
use Notifiable;

protected $guard = 'teretaneuser';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

}

我在MySQL数据库 teretaneusers 中创建表,其中包含列:名称,电子邮件,密码

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'admin-api' => [
        'driver' => 'token',
        'provider' => 'admins',
    ],
    'teretaneuser' => [
        'driver' => 'session',
        'provider' => 'teretaneusers',
    ],
    'teretaneuser-api' => [
        'driver' => 'token',
        'provider' => 'teretaneusers',
    ],
],


 'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
       'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admins::class,
    ],

       'teretaneusers' => [
        'driver' => 'eloquent',
        'model' => App\Teretaneusers::class,
    ],

],

Controllers/UserGymController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserGymController extends Controller
 {

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

/**
 * Show the application dashboard.
 *
 * @return \Illuminate\Http\Response
 */
 public function index()
 {
     return view('teretaneuser');
 }
 }

Controllers\Auth\UserGymLoginController.php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;

 class UserGymLoginController extends Controller
{

 public function __construct()
  {
      $this->middleware('guest:teretaneuser');
  }



 public function showLoginForm(){

 return view('auth.teretaneuser-login');
 }



  public function login(Request $request){

 //validate the form data
 $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required|min:6'
    ]

    );

 //attempt to log user in
 if(Auth::guard('teretaneuser')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)){
           return redirect()->intended(route('userGym.dashboard'));

 }

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

 }
 }

auth/teretaneuser-login.blade.php

form class="form-horizontal" method="POST" action="{{ 
  route('userGym.login.submit') }}"

and web.php

Auth::routes();

Route::get('/home', 'HomeController@index');



Route::prefix('admin')->group( function() {
 Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
 Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit');
 Route::get('/', 'AdminController@index')->name('admin.dashboard');


});


Route::prefix('userGym')->group( function() {
 Route::get('/login', 'Auth\UserGymLoginController@showLoginForm')->name('userGym.login');
 Route::post('/login', 'Auth\UserGymLoginController@login')->name('userGym.login.submit');
 Route::get('/', 'UserGymController@index')->name('userGym.dashboard');


});

谁能告诉我哪里错了?当我尝试从地址http://localhost/logovanje/public/userGym/login登录时,它将我重新编入http://localhost/logovanje/public/home

我使用Laravel 5.4

我为管理员做了同样的工作 .

2 回答

  • 0

    我认为您可以使用Sentinel,因为它有一个名为角色和权限的身份验证包

    这是a link的文档 .

  • 0

    很可能你仍然有一个有效的会话,你有一个中间件(可能是RedirectIfAuthenticated)正在发挥作用 .

相关问题