Laravel自定义身份验证系统

时间:2020-08-28 18:21:51

标签: php laravel laravel-authentication

我正在尝试在laravel中进行多重身份验证,并且在登录后,它会一直将我重定向回登录页面。我试图从登录控制器获取结果表单,所以做到了:

dd(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password]));

返回true

然后我在中间件上做了同样的事情

dd(Auth::guard('admin')->check());

,它返回false

这是我的代码完整代码

模型/管理员

/**
 * Admin Model
 */
namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    protected $fillable = [
        'name', 'email', 'password',
    ];

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

config / auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ]
],

提供者

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

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Model\Admin::class,
        ] 

RouteServiceProvider

public function map()
{
    $this->mapApiRoutes();
    $this->mapAdminRoutes();
    $this->mapWebRoutes();

    //
} 
protected function mapAdminRoutes()
{
    Route::prefix('admin')
        ->namespace($this->namespace)
        ->group(base_path('routes/admin.php'));
}

routes / admin.php

Route::group(['middleware'=>'guest:admin','namespace'=>'Admin'],function (){
    Route::get('login', 'AdminLoginController@showAdminLoginForm')->name('admin.login');
    Route::post('login', 'AdminLoginController@adminLogin')->name('loginAdmin');
});
Route::group(['middleware'=>'auth:admin','namespace'=>'Admin'],function (){
    Route::get('dashbord','DashbordController@index');
});

LoginController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
//use App\Http\Requests\Loginrequest;
use Illuminate\Http\Request;
use \Illuminate\Support\Facades\Auth;

class AdminLoginController extends Controller
{

    public function showAdminLoginForm()
    {
        return view('auth.login');
    }

    public function adminLogin(Request $request)
    {
        if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password]))
        {
            //dd(Auth::guard('admin')->check());
            //returns true
            return redirect()->route('admin.dashbord');
            //return redirect()->intended('/admin/dashbord');
        }
        return back()->withInput($request->only('email', 'remember'));
    }
}

Middleware / RedirectIfAuthenticated.php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * 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('admin')->check()) {
            //  public const ADMIN = '/admin/dashbord';
            return redirect(RouteServiceProvider::ADMIN);
        }
        else{
            // public const HOME = '/home';
            return redirect(RouteServiceProvider::HOME);
        }
        //return $next($request);

    }
}

0 个答案:

没有答案