登录laravel后无法通过guard访问用户id

问题描述 投票:0回答:1

我在

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
,因为用户为空,即使我已登录,我也能够访问登录页面。我有两个守卫,一个用于管理员,另一个用于用户

任何解决此登录问题的解决方案,谢谢

php laravel laravel-8 laravel-7
1个回答
0
投票

如果你想根据 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();
© www.soinside.com 2019 - 2024. All rights reserved.