Abdul Aziz
Abdul Aziz

Reputation: 85

Auth::check return false in middleware with Laravel-10

I read 25 Stackoverflow questions, solutions, and some blogs, also watch some Youtube videos on this problem. But I did not get a solution for this problem. I tried this so many times. Expecting someone's help.

Auth file

'defaults' => [
    'guard' => 'web',
    // 'guard' => 'Registrationform',
    'passwords' => 'users'
],

   'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'Registrationform' => [
        // 'redirectTo'=> 'index',
        'driver' => 'session',
        'provider' => 'Registrationforms',
       ],
],
   'providers' => [
     'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'Registrationforms' => [
        'driver' => 'eloquent',
        'model' => App\Models\Registrationform::class,
    ],'

controller file

    public function login(){
    // if(Auth::guard('Registrationform')->user()){
    //     return redirect()->route('dashboard');
    // }
    return view('login');
    }

    public function authenticate(Request $request):RedirectResponse{
      $request->validate([
        'email' => 'required',
        'password' => 'required',
    ]);

    // // $email = Request::input('email');
    // // $password = Hash::make(Request::input('password'));
     $credentials = $request->only('email', 'password');
    // // dd($credentials);
    // // $credentials = $request->only(['email','password']);
    // if (aith()->attempt(['email' => $email, 'password' => $normal])){
    //     $remember=!empty($request->remember)? true : false;
    // if (Auth::attempt(['email' => $request->email,'password' =>$request- 
       >password],$remember)) {

        //dd($credentials);
        //dd(Auth::user());

       //dd(Auth::attempt($credentials));
       if(Auth::guard('Registrationform')->attempt($credentials)){
      // if(DB::raw){
        //    dump("This block is working");
        // dd("wow");
        // dd(Auth::guard('Registrationform')->login($credentials));
        // if (Auth::login($credentials))
        // {
            $request->session()->regenerate();
            $request->session()->put('user',$credentials['email']);
            return redirect()->intended('index');
        }
        // $request->session()->regenerate();
        // return redirect()->intended(route('index'));

        //call e asen bujay

        // return "hello";
    //   }
    // $user = Registrationform::where('email','=',$request->email)->first();
    // if($user && $request->password == $user->password){
    //             // return redirect()->route('index')->withSuccess('You have 
    Successfully loggedin');
    // //   Auth::login($user);
    // //   if(Auth::check()) {
    //     }

    return redirect()->route("login")->withSuccess('Oppes! You have entered invalid 
   credentials'); }

    public function index():View {
    //return View('index')->withSuccess('You have successfully logged in!');
    // dd(Auth::guard('Registrationform')->user());
    dd(Auth::guard('Registrationform')->check());
    //dd($this->guard()->check());
    // {
    //   dd("wow");
    // return view('index');
        // return redirect()->route(("index"))->withSuccess('You have successfully 
  logged in!');

    // }

    // return redirect()->route('login');  }

middleware file

    public function handle(Request $request, Closure $next): Response{
     dd(\Auth::guard('Registrationform')->check());
    // dd($this->guard()->check());
    // $path=$request->path();
    // // // // dd( Session::get('user'));
    // if(($path=="login"||$path=="register"||$path=="index"||path=="dashboard") && 
    Session::get('user'))
    //  {
    // //   dd("wow");
    // //   return view('index');
    // //  return $next($request);
    //     //  return redirect()->route("index")->withSuccess('You have successfully 
    logged in!');
    //     //  return View("index")->withSuccess('You have successfully logged in!');
    //     return $next($request);

    //  }
    //  elseif(($path=="login"||$path !="register"||$path=="index"||$path=="dashboard") 
    && !Session::get('user')){

    //      return redirect()->route('login');
    //     }

    //     return $next($request); 
    }}

Model

    class RegistrationForm extends Authenticatable{
    use HasApiTokens, HasFactory, Notifiable;
    protected $table = 'registrationforms';
    protected $guard = 'Registrationform';
    protected $primarykey = 'User_ID';
    protected $fillable = 
    ['First_Name','Last_Name','email','email_confirmation','password',
    'password_confirmation','Gender','birthday_day','birthday_month',
    'birthday_month','birthday_year','UserName'];
     // public $timestamps = false;


     protected $hidden = [
    'password','password_confirmation'
     ];}

route

    Route::post('/register', [Registrationcontroller::class,'store']);
    Route::post('/authenticate', [Registrationcontroller::class, 'authenticate']);
    Route::middleware(registrationform::class)->group(function(){
    Route::get('/login',[Registrationcontroller::class, 'login'])->name('login');
    Route::get('/register', [Registrationcontroller::class,'register'])- 
    >name('register');
    Route::get('/index', [Registrationcontroller::class,'index'])->name('index');
    Route::get('/dashboard', [Registrationcontroller::class,'dashboard'])- 
    >name('dashboard');});
    Route::post("/logout",[Registrationcontroller::class,'logout'])->name("logout");

kernel

     protected $middleware = [
    // \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Illuminate\Http\Middleware\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \Illuminate\Session\Middleware\StartSession::class,
    ];

     /**
    * The application's route middleware groups.
    *
    * @var array<string, array<int, class-string|string>>
    */
    protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

       'api' => [
        // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        ];

        /**
        * The application's middleware aliases.
         *
         * Aliases may be used instead of class names to conveniently assign middleware 
          to routes and groups.
          *
         * @var array<string, class-string|string>
          */
    protected $middlewareAliases = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \App\Http\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'Registrationform' => \App\Http\Middleware\registrationform::class,
];

Note-1: StartSession::class, transferred to protected $middleware from protected $middlewareGroups WEB.Have any queries just comment me.

Note-02: I used use Auth instead of Illuminate\Support\Facades\Auth.

Note-3: If you want to join anydesk you can.

Take Advance Thanks.

Upvotes: 3

Views: 1047

Answers (3)

Qu&#253; Đ&#244;n
Qu&#253; Đ&#244;n

Reputation: 13

I found out about your problem, declare it in user.php

protected $primaryKey = 'user_id';
protected $keyType = 'string';
public $incrementing = false;

by default, the primary key will always be the id. If you declare a different column name that will serve as your primary key, don't forget to declare the codes that I stated above or else you end not reading the auth or not logging in.

Upvotes: 0

donlq
donlq

Reputation: 11

you can add $primaryKey = 'user_id' in User models, hope can help you

Upvotes: 1

daveyvdweide
daveyvdweide

Reputation: 117

It's a bit hard to understand your code but I think it boils down to this:

Middleware is ran before your controller code. So the order of code is:

  1. Middleware (your auth check)
  2. Controller (your login action)
  3. Blade

So whenever you log the user in, the middleware is called, before your user is actually logged in by the controller. So Auth::check fails, because the login has not been executed yet.

Upvotes: 0

Related Questions