簡體   English   中英

Auth::user() 在 Laravel 中返回 null

[英]Auth::user() returns null in Laravel 6

我設置了一個自定義保護並登錄 controller
登錄很好,但不知何故它不存儲經過身份驗證的用戶

我已閱讀此“Auth::user() 在 Laravel 5.2 中返回 null”
而這個“Auth::user() 返回 null”

但我認為我的問題與中間件無關

這是代碼:

Controller:

<?php

namespace App\Http\Controllers\GuruAuth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{

    use AuthenticatesUsers;

    protected $redirectTo = RouteServiceProvider::GURU_HOME;

    public function showLoginForm(Request $request)
    {
        return view('auth_guru.login');
    }

    protected function guard()
    {
        return Auth::guard('guru');
    }

    public function username()
    {
        return 'username';
    }

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

Model:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Akun;

class Guru extends Akun
{
    protected $table = 'guru';

    protected $guard = 'guru';

    protected $fillable = [
        'nip', 'nama', 'id_mapel',
        'username', 'password',
    ];

    public function mapel()
    {
        return $this->belongsTo('App\Mapel', 'id_mapel');
    }
}

配置/auth.php:

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

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],

        'guru' => [
            'driver' => 'session',
            'provider' => 'guru',
        ],

        'ortu' => [
            'driver' => 'session',
            'provider' => 'ortu',
        ],
    ],

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

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

        'guru' => [
            'driver' => 'eloquent',
            'model' => App\Guru::class,
        ],

        'ortu' => [
            'driver' => 'eloquent',
            'model' => App\Ortu::class,
        ],
    ],

路線清單:

+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+-----------------+
| Domain | Method   | URI                    | Name                 | Action                                                                 | Middleware      |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+-----------------+
|        | GET|HEAD | admin/dashboard        | admin.dashboard      | Closure                                                                | web             |
|        | GET|HEAD | admin/login            | admin.login          | App\Http\Controllers\AdminAuth\LoginController@showLoginForm           | web,guest:admin |
|        | POST     | admin/login            | admin.login.submit   | App\Http\Controllers\AdminAuth\LoginController@login                   | web,guest:admin |
|        | GET|HEAD | api/user               |                      | Closure                                                                | api,auth:api    |
|        | GET|HEAD | guru/dashboard         | guru.dashboard       | Closure                                                                | web,auth        |
|        | GET|HEAD | guru/login             | guru.login           | App\Http\Controllers\GuruAuth\LoginController@showLoginForm            | web,guest:guru  |
|        | POST     | guru/login             | guru.login.submit    | App\Http\Controllers\GuruAuth\LoginController@login                    | web,guest:guru  |
|        | GET|HEAD | home                   | home                 | App\Http\Controllers\HomeController@index                              | web,auth        |
|        | POST     | login                  |                      | App\Http\Controllers\Auth\LoginController@login                        | web,guest       |
|        | GET|HEAD | login                  | login                | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest       |
|        | POST     | logout                 | logout               | App\Http\Controllers\Auth\LoginController@logout                       | web             |
|        | GET|HEAD | murid                  | murid.index          | App\Http\Controllers\MuridController@index                             | web             |
|        | PUT      | murid/data-diri        | murid.update         | App\Http\Controllers\MuridController@update                            | web             |
|        | GET|HEAD | murid/data-diri        | murid.edit           | App\Http\Controllers\MuridController@edit                              | web             |
|        | GET|HEAD | murid/jadwal           | jadwal.index         | App\Http\Controllers\JadwalController@index                            | web             |
|        | POST     | murid/jadwal           | jadwal.store         | App\Http\Controllers\JadwalController@store                            | web             |
|        | GET|HEAD | ortu/dashboard         | ortu.dashboard       | Closure                                                                | web             |
|        | GET|HEAD | ortu/login             | ortu.login           | App\Http\Controllers\OrtuAuth\LoginController@showLoginForm            | web,guest:ortu  |
|        | POST     | ortu/login             | ortu.login.submit    | App\Http\Controllers\OrtuAuth\LoginController@login                    | web,guest:ortu  |
|        | GET|HEAD | ortu/register          | ortu.register        | App\Http\Controllers\OrtuAuth\RegisterController@showRegisterForm      | web,guest       |
|        | POST     | ortu/register          | ortu.register.submit | App\Http\Controllers\OrtuAuth\RegisterController@register              | web,guest       |
|        | GET|HEAD | password/confirm       | password.confirm     | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm    | web,auth        |
|        | POST     | password/confirm       |                      | App\Http\Controllers\Auth\ConfirmPasswordController@confirm            | web,auth        |
|        | POST     | password/email         | password.email       | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web             |
|        | GET|HEAD | password/reset         | password.request     | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web             |
|        | POST     | password/reset         | password.update      | App\Http\Controllers\Auth\ResetPasswordController@reset                | web             |
|        | GET|HEAD | password/reset/{token} | password.reset       | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web             |
|        | GET|HEAD | register               | register             | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest       |
|        | POST     | register               |                      | App\Http\Controllers\Auth\RegisterController@register                  | web,guest       |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+-----------------+

我還嘗試將其添加到 controller:

    public function authenticated(Request $request, $user)
    {
        $user = $this->guard()->user();
        Auth::setUser($user);
    }

當我嘗試從視圖訪問 Auth::user() 時,它返回 null。

視圖直接從 route/web.php 調用:

Route::group(['prefix' => 'guru'], function() {
    Route::get('/login', 'GuruAuth\LoginController@showLoginForm')->name('guru.login');
    Route::post('/login', 'GuruAuth\LoginController@login')->name('guru.login.submit');
    Route::get('/dashboard', function() {
        return view('guru.index');
    })->name('guru.dashboard');
});

編輯:Christophe Hubert,這是我覆蓋 function 后的屏幕截圖: 其實和以前一樣

所以,我不知道為什么會這樣,最終放棄后,我想出了一個(不太干凈的)解決方案。
現在,我沒有使用多個警衛,而是創建了從 users 表到 guru/admin 表的關系。

這就是我現在訪問它的方式Auth::user()->guruAuth::user()->admin

我知道這不是一個好的解決方案,但這是我能找到的最快的解決方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM