Laravel 5 Auth :: user () везде пуст, кроме функции index () и шаблона блейда - PullRequest
0 голосов
/ 19 сентября 2018

Я некоторое время пытался это выяснить, но ни одно решение, которое я нашел, не было убедительным.В основном я пытаюсь получить список клиентов на основе пользователя, вошедшего в систему, но я не могу получить объект пользователя нигде в контроллере, кроме функции index(), которая возвращает представление, а также шаблон блейда, который отображает зарегистрированныйв имени пользователя.

Это мой ClientController.php:

<?php

namespace App\Http\Controllers;

use App\Http\Models\Client;
use App\Http\Requests\GetClientsRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;

class ClientController extends Controller
{
    protected $user;
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {

       $this->middleware(function ($request, $next) {
           $this->user = Auth::user();

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

    /**
     * Show the clients page.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        Log::info("client user: " . print_r($this->user, 1));
        return view('page');
    }

    public function getClients()
    {
        $currentUser = Auth::user();

        if ($currentUser) {
            $clients = Client::with('account')
                    ->where('user_id', $currentUser->account)
                    ->get();

            $collection = collect($clients);

            return response($collection->toArray());
        }
    }
}

Функция Log in index выводит пользовательский объект без проблем - но когда он вызывается в функции getClients(), оно пустое.Я также пытался использовать это в __construct():

$this->middleware('auth');

Согласно шаблону Laravel, который я использовал, но всякий раз, когда я вызываю маршрут API getClients, я всегда получаю 401 Несанкционированную ошибку.

Вот мой api.php файл маршрутов (хотя только в настоящее время использующий вызов getClients):

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::get('welcome-message', 'DashboardController@getWelcomeMessage');

Route::prefix('clients')->group(function () {
    Route::get('/', 'ClientController@getClients');
    Route::get('/{clientId}', 'ClientController@getClient');
    Route::post('/', 'ClientController@postCreateClient');
    Route::put('/{clientId}', 'ClientController@putUpdateClient');
});

И мой web.php файл маршрутов:

<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


Auth::routes();

Route::get('/', 'HomeController@index')->name('dashboard');
Route::get('/clients', 'ClientController@index')->name('clients');

Система знаетЯ вошел в систему, потому что я вообще не смог бы посетить инструментальную панель клиента, поэтому я не понимаю, почему я не могу получить результат от Auth::user() в функции - если я не использую промежуточное ПО неправильно

1 Ответ

0 голосов
/ 19 сентября 2018

Вы должны будете использовать промежуточное ПО auth:api, чтобы разрешить аутентификацию API .

. Для этого добавьте это промежуточное ПО в свой маршрут API, в этом случае не добавляйте промежуточное ПО в__constructor.

Route::group([
    'prefix' => 'clients',
    'middleware' => ['auth:api']
], function(){
    Route::get('/', 'ClientController@getClients');
    // ... etc
});

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

Обратите внимание, что для аутентификации пользователей в веб-аутентификации (промежуточное ПО: auth) используется иной механизм , чем в аутентификации API (промежуточное ПО: auth:api).

...