Laravel - 身份验证,路线未记录

Posted

技术标签:

【中文标题】Laravel - 身份验证,路线未记录【英文标题】:Laravel - Auth, route is not logged 【发布时间】:2020-09-14 12:14:11 【问题描述】:

登录成功后路由调用Controller的方法出现问题。 在新方法中,用户似乎没有登录。 我不明白为什么。

步骤是:用

登录
Route::post('login', 'UserController@login')->name('login');

然后检查用户是否登录:

Route::get('check-login', 'UserController@checklogged');

控制器是这个:

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Faker\Generator as Faker;

class UserController extends Controller

  // regole per FormValidator
  protected $rulesLogin = [
    'email' => 'bail|required|email',
    'password' => 'required',
  ];



  // Effettuo il login
  /**
   *  Method: POST
   * @Parameters: email, password
   * return: Authenticated User.
   */
  public function login(Request $request)
  
    //dd($request->all());

    $validator = Validator::make($request->all(),$this->rulesLogin);

    // login fallito
    if ($validator->failed()) 
      return response([
        'status' => 'ko',
        'message' => $validator->errors()->first(),
      ], 422);
    

    // login errato
    if (!Auth::attempt([
      'email' => $request->email,
      'password' => $request->password,
      'status' => ['active'],
    ])) 
      return response(
        [
          'status' => 'ko',
          'message' => 'Invalid email or password',
        ], 422);
    

    return (Auth::user());
  

  public function checklogged()
  
    return dd(Auth::id());
  

checklogged() 总是返回 false。我希望它返回一个用户记录的 ID

【问题讨论】:

【参考方案1】:

我认为问题是你没有在路由中使用网络中间件。如果你遵循 HMVC 模式,请确保使用这样的网络中间件。

    Route::group([
        'middleware' => ['web'],

    ], function () 

    );

或者请检查您的 RouteServiceProvider.php 文件是否在 mapWebRoutes() 函数中有网络中间件

   protected function mapWebRoutes()
    
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    

【讨论】:

【参考方案2】:

试试这个sintaxe:

public function checklogged()
  
    return dd(Auth::user()->id);
  

【讨论】:

【参考方案3】:

问题是作为访客的中间件。

Route::post('login', 'UserController@login')->name('login')->middleware('guest');

【讨论】:

以上是关于Laravel - 身份验证,路线未记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 + Ajax 等于 401 未经身份验证

Laravel with JWT - 如何为只有在未经身份验证的情况下才能看到的路由创建路由组

我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出

如何使用 Laravel API 身份验证返回未授权

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

Laravel Tymon\JWT Auth:在身份验证之前检查未完成的有效令牌?