如何在数据库中创建 Laravel 5.4 会话

How to create a Laravel 5.4 Session in the Database

我已经搜索了文档并且花了几个小时试图弄清楚这一点,这确实是我最后的选择。如果这不起作用,我可能必须订阅 Laracasts。我正在按照本指南进行操作,但它似乎对我不起作用。 https://laravel.com/docs/5.4/session

我希望有人能帮助我并告诉我我做错了什么。当我执行我的 API 请求时,我得到一个成功的响应,它 returns 来自数据库的用户,但它不会在会话 table 中创建会话。另外,我在 laravel.log.

中没有收到任何错误

我可以毫无问题地创建用户。我可以在检索用户时匹配散列密码。

api.php

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

Route::post('/users', 'UserApiController@login');

UserApiController.php

public function login()
{
    $input = Request::all();
    $user = new User();
    $response = ['success' => false];
    if (!$user->validate($input))
    {
        return response()->json($response, 412);
    }
    $user = User::where('Email', $input['Email'])->where('Password', User::makePassword($input['Password']))->first();

    Log::info($user); //returns the user object successfully

    if (!isset($user))
    {
        return response()->json($response, 401);
    }
    session('user', $input]);  //<--this is not working
    $response['success'] = true;
    return response()->json($response, 200);
}

我不确定你写的是否是你真正想要实现的,但这就是我的想法 - 你正在使用 api 中间件组并且你想使用会话。但是,如果您查看 app/Http/Kernel.php,您会发现会话默认仅由 web 中间件组使用:

\Illuminate\Session\Middleware\StartSession::class,

所以您可以将此中间件添加到 api 组或重新考虑您真正想要实现的目标,因为 API 通常是无状态的,所以您通常不会为它们使用会话,因为在每个请求中您都会发送授权数据(api_token 在这种情况下默认)所以每次你都可以找出哪个用户正在发出请求