Laravel:用户登录时用户生日重置

问题描述 投票:1回答:1

我的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版中的artisan命令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');
}

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

如果您需要更多信息,请告诉我。任何帮助是极大的赞赏 :)

php laravel php-carbon
1个回答
1
投票

将列的类型从timestamp更改为datetime

© www.soinside.com 2019 - 2024. All rights reserved.