CreateFreshApiToken не создает cookie-файл laravel_token - PullRequest
0 голосов
/ 15 февраля 2019

Как видно из заголовка, CreateFreshApiToken не создает куки.Поэтому я не могу использовать его для авторизации вошедшего в систему пользователя для других запросов, связанных с пользователем.

Я попытался установить cookie в ответе, и он отлично работает.Так что это должно сделать что-то с CreateFreshApiToken не работает.

AuthController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\User;

class AuthController extends Controller
{
    public function signup(Request $request)
    {
        $request->validate([
            'name' => 'required|string',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string'
        ]);
        $user = new User([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password)
        ]);
        $user->save();
        return response()->json([
            'message' => 'Successfully created user!'
        ], 201);
    }

    public function signin(Request $request)
    {
        $request->validate([
            'email' => 'required|string|email',
            'password' => 'required|string'
        ]);
        $credentials = request(['email', 'password']);

        if(!Auth::attempt($credentials))
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);

        $user = $request->user();
        $tokenResult = $user->createToken('Personal Access Token');
        $token = $tokenResult->token;
        $token->save();

        return response()->json([
            'message' => 'Successfully signed in!'
        ]);
    }

    public function signout(Request $request)
    {
        $request->user()->token()->revoke();
        return response()->json([
            'message' => 'Successfully signed out!'
        ]);
    }

    public function user(Request $request)
    {
        return response()->json($request->user());
    }

    public function test()
    {
        return response()->json([
            'message' => 'test'
        ]);
    }

    public function test2(Request $request)
    {
        return response()->json([
            'laravel_token' => $request->cookie('laravel_token')
        ]);
    }
}

Kernel.php

    protected $middlewareGroups = [
        'web' => [
           //...
           \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
        ],

        'api' => [
           'throttle:60,1',
           'bindings',
           \Barryvdh\Cors\HandleCors::class,
        ],
    ];

api.php

Route::group([
    'prefix' => 'auth'
], function () {
    Route::post('signin', 'AuthController@signin');
    Route::post('signup', 'AuthController@signup');
    Route::get('test', 'AuthController@test');
    Route::get('test2', 'AuthController@test2');

    Route::group([
        'middleware' => ['auth:api']
    ], function() {
        Route::get('signout', 'AuthController@signout');
        Route::get('user', 'AuthController@user');
    });
});

И это мой угловой код:

  test() {
    return this.http.get('http://homestead.test/api/auth/test', {withCredentials: true})
      .subscribe(response => {
        console.log(response);
      });
  }

  test2() {
    return this.http.get('http://homestead.test/api/auth/test2', {withCredentials: true})
      .subscribe(response => {
        console.log(response);
      });
  }

Я также настроил cors с https://github.com/barryvdh/laravel-cors успешно с включенной функцией supportCredentials.Я также отправляю бесполезный запрос GET, чтобы увидеть, установлен ли какой-либо laravel_token в cookie, но безуспешно.

1 Ответ

0 голосов
/ 15 февраля 2019

CreateFreshApiToken является частью группы промежуточного программного обеспечения web, поэтому для установки файлов cookie необходимо, чтобы ваша страница входа была маршрутом web (вместо маршрута api).

...