Laravel получить идентификатор пользователя по незащищенному маршруту - PullRequest
0 голосов
/ 15 февраля 2020

Я использую Laravel guard для защиты маршрутов, теперь я хочу получить пользователя id на незащищенных (общих) маршрутах, например:

Защищено:

/ Profile

Незащищено:

/ Поиск

Мне удалось получить идентификатор пользователя в защищенных маршрутах, например ProfileController. php , вот так:

$id = auth()->guard('agent')->user()->id;

Но я хочу получить это в searchController. php но оно возвращает ноль, есть идеи?

api. php:

Route::middleware('auth:agent')->group(function () {
    Route::get('profile', 'ProfileController@details');
});

Route::post('search', 'searchController@search');

С другой стороны, когда пользователь вошел в систему и открыл страницу поиска, я хочу получить идентификатор пользователя.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020

Вы должны создать контроллер, который передает пользовательские данные, такие как id или др. c:

Route::middleware('auth:agent')->group(function () {
    Route::get('userdata', 'ProfileController@userdata'); // return user id
});

И:

public function userdata(){
   ...
   $id = auth()->guard('agent')->user()->id; // just id
   return $id;
}

Этот контроллер может извлекать все пользовательские данные, Теперь вам нужно вызвать этот запрос в вашем контроллере поиска:

app('App\Http\Controllers\ProfileController')->userdata();
1 голос
/ 15 февраля 2020

Итак, продолжая мои комментарии выше - вот что я попробовал и работает без сбоев:

config / auth. php

'guards' => [
    //..

    'agent' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    //...
],

app / Http / Controllers / HomeController. php

public function index(): JsonResponse
{
    return new JsonResponse([
        'user' => auth()->guard('agent')->user(),
    ]);
}

маршруты / веб. php

Route::get('/', 'HomeController@index')->name('home');

тесты /Feature/HomeTest.php

/**
 * @test
 */
public function returns_user()
{
    $this->actingAs($user = factory(User::class)->create(), 'agent');

    $this->assertTrue($user->exists);
    $this->assertAuthenticatedAs($user, 'agent');

    $response = $this->get(route('home'));

    $response->assertExactJson([
        'user_id' => $user->toArray()
    ]);
}

/**
 * @test
 */
public function does_not_return_user_for_non_agent_guard()
{
    $this->actingAs($user = factory(User::class)->create(), 'web');

    $this->assertTrue($user->exists);
    $this->assertAuthenticatedAs($user, 'web');

    $response = $this->get(route('home'));

    $response->assertExactJson([
        'user_id' => null
    ]);
}

И тест проходит нормально, поэтому я могу только догадываться, что есть что-то с вашей реализацией agent guard или auth:agent middleware .

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