无法在控制器中获取用户 ID 并且 Auth::check() 不起作用 - Laravel 5.8



我是 laravel 5.8 的新手,无法在 api 控制器中使用 Auth,以下是详细信息:

  1. 我已将默认用户表从users更改为User

用户.php

<?php
    namespace App;
    use IlluminateNotificationsNotifiable;
    use IlluminateContractsAuthMustVerifyEmail;
    use IlluminateFoundationAuthUser as Authenticatable;
    class User extends Authenticatable
    {
        use Notifiable;
        protected $table = 'User';
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'firstName', 'lastName', 'email', 'password',
        ];
        /**
         * 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',
        ];
    }
  1. 没有更改身份验证中的任何内容.php

    <?php 
      return 
    ['defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUser::class,
        ],
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ], 
    ];
    

我的问题:如何使 Auth::check(( 在此控制器中工作并获取用户 ID。这将返回Not logged

<?php
namespace AppHttpControllersapi;
use IlluminateHttpRequest;
use AppHttpControllersController;
use Session;
use DB;
use Response;
use Auth;
class AccountsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {   
         //
        $userID = Auth::id();
        if (Auth::check()) {
            return "User logged , user_id : ".$userID ;
        }else{
            return "Not logged"; //It is returning this
        }
    }
}

我已经尝试了类似问题的几个答案(Q1 Q2(,但没有用。

如果使用 API 路由,则没有登录用户。 API的身份验证是通过令牌完成的,您可以在Laravel文档中阅读有关它的信息。

除非您使用 Web 路由,否则不会调用会话中间件,因此会话不会启动,因此无法使用身份验证。

您要实现什么,因为将身份验证与 API 路由一起使用是不正常的。

用户可以尝试在会话中设置身份验证用户。这将在身份验证后设置用户并设置 Auth::user((。

Auth::attempt(['email' => request('email'), 'password' => request('password')])

从控制器来看,您似乎正在尝试在使用 API 路由时访问会话。API 路由无权访问会话。应从 web.php 中定义的路由调用控制器,或者应使用令牌进行身份验证。查阅 Laravel 文档以探索 API 身份验证的可能性。

最新更新