Получение значения сеанса в Laravel возвращает ноль - PullRequest
0 голосов
/ 27 октября 2018

Я устанавливаю и пытаюсь получить значение сеанса из приложения Laravel. Интерфейс Vue Js выполняет вызов API для конечной точки Laravel, которая устанавливает значение сеанса. Контроллер, который содержит метод для конечной точки Laravel:

<?php

namespace App\Http\Controllers;

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

use App\User;

class UserController extends Controller
{
    public function adduser(Request $request) {

        $user = User::where( 'sub', $request->sub )->first();

        if(!$user) {

            $user = new User();

            $user->nickname = $request->nickname;
            $user->name = $request->name;
            $user->sub = $request->sub;
            $user->api_token = $request->api_token;

            $user->save();

        }

        $user->api_token = $request->api_token;
        $user->save();

        return response()
            ->json([
                'done' => $user->api_token
            ]);

    }

    //The endpoint for this method is http://localhost:8000/api/set
    public function setSession(Request $request) {


        $request->session()->put('info', 'testing vue client again');
        Session::save();

        return response()
            ->json([
                'done' => session('info')
            ]);

    }
    //The endpoint for this method is: http://localhost:8000/api/get
    public function getSession(Request $request) {

        $value = $request->session()->get('info');
        return response()
            ->json([
                'done' => $value
            ]);

    }

}

Данные сеанса установлены успешно, однако, когда я пытаюсь извлечь эти данные из метода getSession(), он возвращает ноль. Это фрагмент кода Vue Js / axios, который я использовал, чтобы попытаться получить данные сеанса

axios({
 method: 'get',
 url: 'http://localhost:8000/api/get',


}).then((res) => {
console.log(res.data)
})

Как мне решить эту проблему? Спасибо

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Я воспроизвел проблему и, похоже, проблема с файлами cookie.Это помогло мне:

app \ Http \ Middleware \ EncryptCookies.php

protected $except = [
    'laravel_session',
];

Измените laravel_session на ваше значение config('session.cookie').

См. Изменения идентификатора сеанса при обновлении (Laravel 5.4 + AngularJS 1.6)

0 голосов
/ 28 октября 2018

Маршруты из файла route / api.php по умолчанию не имеют промежуточного программного обеспечения StartSession, потому что вызовы api считаются не сохраняющими состояние.Вы можете добавить это промежуточное программное обеспечение с EncryptCookies в группу промежуточного программного обеспечения API в вашем файле app/Http/Kernel.php следующим образом, с точной последовательностью:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        'throttle:60,1',
        'bindings',
    ],
];

Работает для меня.Кроме того, подумайте, что вы можете настроить api group точно так же, как web group в вашем случае.

И не забудьте снова установить переменную сеанса с новой конфигурацией.

...