Laravel:用户登录后,用户生日将重置

时间:2019-03-17 09:31:57

标签: php laravel php-carbon

我的Laravel应用程序中有一个非常奇怪的问题。

在我的应用程序中:我有一个字段,用户注册时必须在其中输入出生日期。一旦注册并首次登录,所有文件都会正确保存并正确显示(注册后会自动登录)。但是,一旦注销并重新登录:生日日期将重置为今天的日期。 这就是奇怪的地方:它仅在我在生产服务器上执行时才会发生。在本地开发服务器上,它表现得非常正常。

它仅发生在登录的特定帐户上,不会一次影响所有帐户。

生产服务器是从Laravel Forge运行的,并托管在DigitalOcean上。生产服务器正在运行 Ubuntu 18.04 和PHP版本7.2

本地开发服务器是Windows计算机,我使用的是 Laragon 随附的任何软件。

使用的Laravel版本是5.6


现在这是我在生日字段中拥有的所有代码:

数据库迁移

Schema::table('users', function (Blueprint $table) {
    $table->timestamp('birthday')->after('password');
});

RegisterController.php

protected function validator(array $data)
{
    return Validator::make($data, [
        ...
        'birthday' => 'required|date_format:d.m.Y',
        ...
    ]);
}

protected function create(array $data)
{
    return User::create([
        ...
        'birthday' => Carbon::parse($data['birthday'])->format('Y-m-d H:i:s'),
        ...
    ]);
}

LoginController使用的是Laravel 5.6版中由工匠命令make:auth生成的默认的未经修改的登录代码。

这是我的用户首选项的控制器代码,如果他们在注册期间未正确输入生日,则可以在其中更改出生日期。

AccountController.php 这是捕获当前登录用户并显示其首选项的代码:

public function index() {
    $user = User::find(Auth::id());

    return view('account.account')->withUser($user);
}

这是当他们单击保存时保存和更新其首选项的部分:

public function update(Request $request) {
    $this->validate($request, [
        ...
        'birthday' => 'required|date|before:-15 years'
    ]);

    $user = User::find(Auth::id());

    ...
    $user->birthday = Carbon::parse($request->birthday)->format('Y-m-d H:i:s');
    ...
    $user->save();

    Session::flash('success', 'Din bruker ble oppdatert.');

    return redirect()->route('my.account');
}

这一切都很好,它可以在数据库中正确更新和设置生日。用户登录后,它会更改为今天的日期。本地开发服务器不会发生这种情况,只有在生产服务器中才会发生这种情况。这使得正确调试非常困难。

如果您需要更多信息,请告诉我。任何帮助,我们将不胜感激:)

1 个答案:

答案 0 :(得分:1)

将列的类型从timestamp更改为datetime