Не удается получить идентификатор пользователя в контроллере, и Auth :: check () не работает - Laravel 5.8 - PullRequest
4 голосов
/ 09 апреля 2019

Я новичок в laravel 5.8, не могу использовать Auth в контроллерах API, ниже приведены подробности:

  1. Я изменил таблицу пользователей по умолчанию с users на User

User.php

<?php

    namespace App;

    use Illuminate\Notifications\Notifiable;
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User 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',
        ];
    }

Ничего не изменилось в auth.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' => App\User::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],
], 
];

Мой вопрос: Как мне сделать Auth :: check () работайте в этом контроллере и получите идентификатор пользователя.Это возвращает Not logged

<?php

namespace App\Http\Controllers\api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use Session;
use DB;
use Response;

use Auth;

class AccountsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    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 ), но это не сработало.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2019

При использовании маршрутов API не будет зарегистрированного пользователя. Аутентификация для API выполняется токенами, об этом вы можете прочитать в Laravel docs .

Промежуточное программное обеспечение сеанса не вызывается, если вы не используете веб-маршруты, поэтому сеанс не запускается и, следовательно, невозможно использовать аутентификацию.

Чего вы пытаетесь добиться, так как использование Auth с маршрутами API не является нормальным.

1 голос
/ 09 апреля 2019

Использование может попробовать это для настройки аутентификации пользователя в сеансе. Это установит пользователя после аутентификации и установит Auth :: user ().

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

0 голосов
/ 09 апреля 2019

С вашего контроллера, похоже, вы пытаетесь получить доступ к сеансу при использовании маршрута API. У маршрутов API нет доступа к сеансу. Вы должны позвонить своему контроллеру по маршруту, указанному в web.php, или вам необходимо пройти аутентификацию с использованием токенов. Консультируйтесь с Laravel docs , чтобы изучить возможности аутентификации API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...