【问题标题】:Laravel - Auth, route is not loggedLaravel - 身份验证,路线未记录
【发布时间】: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

【问题讨论】:

    标签: php laravel authentication


    【解决方案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');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-24
          • 2016-08-24
          • 2019-11-19
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 2019-04-15
          • 2023-03-10
          相关资源
          最近更新 更多