Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.1自定义表名和字段名_Php_Mysql_Laravel - Fatal编程技术网

Php Laravel 5.1自定义表名和字段名

Php Laravel 5.1自定义表名和字段名,php,mysql,laravel,Php,Mysql,Laravel,我正在使用一个已经设置好的数据库将一个旧的应用程序升级到Laravel 5.1,并使用现成的身份验证系统(内置)。只有当我使用电子邮件和密码作为字段名时,注册/登录才有效,否则它允许用户注册,但不允许他们登录。我的问题是我们可以使用自己的文件名吗?我认为您需要更改迁移和用户模型的$filleble属性AuthController和Illumb\Foundation\Auth\AuthenticatesUserspostLogin和loginUsername方法您应该将用户名属性设置为AuthCo

我正在使用一个已经设置好的数据库将一个旧的应用程序升级到Laravel 5.1,并使用现成的身份验证系统(内置)。只有当我使用电子邮件和密码作为字段名时,注册/登录才有效,否则它允许用户注册,但不允许他们登录。我的问题是我们可以使用自己的文件名吗?

我认为您需要更改
迁移
用户
模型的
$filleble
属性
AuthController
Illumb\Foundation\Auth\AuthenticatesUsers
postLogin
loginUsername
方法

您应该将
用户名
属性设置为AuthController

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $username = 'field_name';

    ...
}
检查
照明\Foundation\Auth\AuthenticatesUsers@loginUsername
方法

编辑 如果要更改
密码
字段名(或使用laravel auth中的另一个字段),应覆盖
postLogin
方法,因为它是硬编码的

public function postLogin(Request $request)
{
    $this->validate($request, [
        'co_Email' => 'required', 'co_Password' => 'required'
    ]);

    $throttles = $this->isUsingThrottlesLoginsTrait();

    if ($throttles && $this->hasTooManyLoginAttempts($request)) {
        return $this->sendLockoutResponse($request);
    }

    $credentials = $request->only('co_Email', 'co_Password');

    if (Auth::attempt($credentials, $request->has('remember'))) {
        return $this->handleUserWasAuthenticated($request, $throttles);
    }

    if ($throttles) {
        $this->incrementLoginAttempts($request);
    }

    return redirect($this->loginPath())
        ->withInput($request->only('co_Email', 'remember'))
        ->withErrors([
            'co_Email' => $this->getFailedLoginMessage(),
        ]);
}

拉威尔让这一切变得非常简单。正如@pespantelis所说,您可以覆盖email字段。以您的形式:

<input type="email" name="co_Email">
为了让Laravel在仍然使用默认身份验证系统的情况下查看正确的密码列,这有点不同,但仍然很简单。只需遵循以下步骤:

  • 不要更改密码字段的名称,因此只需将其命名为“password”,就像您通常所做的那样:

    <input type="password" name="password">
    

  • 然后,Laravel将“密码”字段与“co_密码”列进行比较。

    感谢shafi,不仅是在迁移、用户模型的可填充中,而且在AuthController中。但是仍然不起作用。请告诉我您正在尝试的一些更改。我将尝试执行相同的操作,看看您是否需要更改
    illumb\Foundation\Auth\AuthenticatesUsers
    。。。现在我建议做点别的。。不要试图弄乱代码。。。但是,仍然要更新您的问题并解释您正在尝试做的更改。在db中,我有co_密码、co_名称、co_电子邮件字段。我想在laravel auth中使用。我无法更改字段名,因为其他应用程序也在使用这些字段名。好吧,如果我们在下一次artisan更新时更新AuthenticateUsers这样的特征,这些特征将被覆盖?那么我相信@thomas kim已经提出了一个很好的解决方案。对
    AuthController
    User
    模型的更改是可以接受的。谢谢,我刚刚更新了illumb\Foundation\Auth\AuthenticatesUsers文件,用代码更改postLogin函数,与您的代码唯一不同的是,我们不需要按需输入co_名称字段。另外,我还更新了同一文件中的getCredentials函数
    getCredentials受保护函数(Request$Request){return$Request->only($this->loginUsername(),'co_Password');}
    现在登录时,会显示一条错误消息,这些凭据与我们的记录不匹配。哦,对不起,你把我弄糊涂了。如果没有
    co_Name
    字段,它的工作方式就像charm.co_Name字段在Reg中。这是正常工作的。现在,我更新了AuthenticatesUsers、User model、Login view和AuthController.php文件中的代码,该文件位于app/Http/Controllers/Auth中,但仍然存在相同的错误消息
    <input type="password" name="password">
    
    public function getAuthPassword()
    {
        return $this->co_Password;
    }