laravel 8 fortify Auth::user() возвращает null после входа в систему
У меня проблема с аутентификацией в моем Laravel 8.12, я использую Laravel fortify 1.7.8 по умолчанию, я вхожу в систему с правильными учетными данными, приложение перенаправляется на панель управления, как я хочу, но аутентификация промежуточного программного обеспечения, похоже, не работает, и также
Auth::user()
возвращает ноль,
Модель пользователя
<?php
namespace App\Models;
use App\Models\LoginHistoric;
use App\Traits\Uuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
use HasFactory;
use Notifiable;
use Uuids;
protected $table = 'staffs';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'staff_identification',
'full_names',
'email',
'password',
'gender',
'address',
'phone',
'dateOfBirth',
'role_id',
];
/**
* 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',
];
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
}
FortifyServiceProvider
<?php
namespace App\Providers;
use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider;
use Laravel\Fortify\Fortify;
class FortifyServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->email.$request->ip());
});
RateLimiter::for('two-factor', function (Request $request) {
return Limit::perMinute(5)->by($request->session()->get('login.id'));
});
Fortify::loginView(function (){
return view('auth.login');
});
Fortify::requestPasswordResetLinkView(function (){
return view('auth.forget-password');
});
Fortify::resetPasswordView(function ($request){
return view('auth.rest-password',['request' => $request]);
});
}
}
Лезвие входа в систему
@extends('layouts.app')
@section('content')
<section class="hero">
<div class="hero-body">
<div class="container">
<div class="columns is-vcentered is-centered">
<div class="column is-5-tablet is-4-desktop is-3-widescreen has-text-centered">
<img src="{{asset('assets/images/undraw_Login.svg')}}" alt="" srcset="">
</div>
<div class="column is-6-tablet is-5-desktop is-4-widescreen">
<form class="box" method="post" action="{{route('login')}}">
@csrf
<div class="field has-text-centered">
<img src="{{asset('assets/images/BTS_logo.png')}}" width="167">
</div>
<div class="field">
<label class="label">Email</label>
<div class="control has-icons-left">
<input class="input @error('email') is-danger @enderror" name="email" type="email" value="{{ old('email') }}" placeholder="e.g. alexjohnson@gmail.com" required>
<span class="icon is-small is-left">
<i class="fa fa-envelope"></i>
</span>
@error('email')
<span class="invalid-feedback">
{{$message}}
</span>
@enderror
</div>
</div>
<div class="field">
<label class="label">Password</label>
<div class="control has-icons-left">
<input class="input @error('password') is-danger @enderror" name="password" type="password" placeholder="********" required>
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
</span>
@error('password')
<span class="invalid-feedback">
{{$message}}
</span>
@enderror
</div>
</div>
<div class="field">
<a class="btn-link" href="{{route('password.request')}}">
{{ __('passwords.forgot_password') }}
</a>
</div>
<div class="field has-text-centered">
<button name="submit" class="button is-success">
{{__('auth.login')}}
</button>
</div>
<p>Don't have an account? Please <a href="#" class="is-link">Register</a></p>
</form>
</div>
</div>
</div>
</div>
</section>
@endsection
Маршруты
Route::get('/dashboard',function(){
dd(\Illuminate\Support\Facades\Auth::user());
// return view('welcome');
});
Я искал ошибку, но не могу ее найти, пожалуйста, мне нужна помощь, спасибо
3 ответа
работать с
Auth::user()
вам нужно подать заявку
auth()
промежуточное ПО
Route::get('/dashboard',function(){
dd(auth()->user());
// return view('welcome');
})->middleware('auth');
Побегал вокруг моего хвоста несколько часов, а потом понял!
Это швы, когда вы используете
auth
на родителя
__construct
метод с у ребенка
\Auth::user()
вызов всегда будет возвращать ноль. Но он отлично работает в
__invoke
метод после того, как объект полностью создан.
Не уверен, что это ошибка PHP или Laravel. Но мне кажется, PHP должен быть единственным!
Я использую:
- PHP 8.0.14
- Laravel/Фреймворк v8.81.0
- Laravel/Fortify v1.10.0 (базовая установка)
Это (используя
Auth::user()
на дочернем классе) работал на меня.
У меня возникла проблема, когда мой товарищ по команде изменил конфигурацию config/auth.php, защита по умолчанию была api
*'defaults' => [
'guard' => 'web',
// 'guard' => 'api',
'passwords' => 'users',
],*