我在
web.php
中定义了这条路线
web.php
Route::group(['prefix' => 'user'], function () {
Route::get('login', [FrontendController::class ,'showLoginForm'])->name('user.login-show');
Route::post('login', 'App\Http\Controllers\LoginController@login')->name('login.post');
}
这是我的登录控制器
<?php
namespace App\Http\Controllers;
use Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Hash;
use Darryldecode\Cart\Facades\Cart;
class LoginController extends Controller
{
use AuthenticatesUsers;
//
protected $redirectTo = '/user/dashboard';
public function __construct()
{
$this->middleware('guest:web')->except('logout');
}
public function showLoginForm()
{
return view('pages.login');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6',
'remember_me'=>'nullable'
]);
$request->merge(['user_type'=>'0']);
if (Auth::guard('web')->attempt([
'email' => $request->email,
'password' => $request->password,'user_type' => $request->user_type
], $request->input('remember_me'))) {
$userID = Auth::guard('web')->user()->id;
return redirect()->intended(route('web.dashboard'));
}
else{
return back()->withErrors(['message'=>'Username or Password is Invalid'])->withInput($request->all());
}
}
public function logout(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
}
public function dashboard()
{
}
}
配置/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
RedirectedIfAuthenticated 中间件:
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
如果我尝试登录,那么我在登录控制器中能够通过此代码获取用户ID,能够使用此代码获取用户ID
Auth::guard('web')->user()->id;
,但是在执行此登录功能代码之后,无法在其他中获取用户ID方法或控制器,它返回Attempt to read property "id" on null
,因为用户为空,即使我已登录,我也能够访问登录页面。我有两个守卫,一个用于管理员,另一个用于用户
任何解决此登录问题的解决方案,谢谢
如果你想根据 Laravel Doc 检索当前经过身份验证的用户:
use Illuminate\Support\Facades\Auth;
// Retrieve the currently authenticated user...
$user = Auth::user();
// Retrieve the currently authenticated user's ID...
$id = Auth::id();