我想在使用Laravel身份验证时更改数据库中的密码字段。我希望我的列在用户
表中有名称Passwd
而不是密码
。我试着运行这样的东西:
Auth::attempt(array(
'user_name' => 'admin',
'passwd' => 'hardpass',
));
但它不起作用。
我还尝试在User
模型中添加以下函数:
public function getAuthPassword() {
return $this->passwd;
}
但它也不会改变什么。用户仍未通过身份验证。在Laravel中是否可以更改数据库中的密码字段名?
您可以轻松更改数据库中的所有其他字段,并使用它们进行身份验证。唯一的问题是密码
字段。
事实上,password
字段在某种程度上是用Laravel硬编码的(但不是许多人认为的方式),所以您不能像在问题中传递一样传递数组。
默认情况下,如果您将数组传递给尝试
(可能还有其他身份验证函数,如验证
或一次
),如果您这样做:
Auth::attempt(array(
'user_name' => 'admin',
'password' => 'hardpass',
));
默认的Eloquent驱动程序将运行以下查询:
select * from `users` where `user_name` = 'admin' limit 1;
从数据库获取此数据后,它会将您提供的密码与创建的用户对象的password属性进行比较。
但是如果你简单地使用:
Auth::attempt(array(
'user_name' => 'admin',
'passwd' => 'hardpass',
));
将运行以下查询:
select * from `users` where `user_name` = 'admin' and `passwd` = 'hardpass' limit 1;
并且在数据库中找不到用户(在Passwd
中存储哈希密码)。这是因为Eloquent从查询密码
中删除,但使用任何其他数据来运行查询。此外,如果您尝试在这里使用'Passwd'=
解决这个问题很容易。您需要像这样运行
Auth::trunt
:
Auth::attempt(array(
'user_name' => 'admin',
'password' => 'hardpass',
));
正如您看到的,您仍然将
密码
作为密钥传递(尽管用户
表中不存在此列),因为只有这样,雄辩的驱动程序才不会将其用于生成查询。
现在在
User
Model(app/Model/User.php
)文件中需要添加以下函数:
public function getAuthPassword() {
return $this->passwd;
}
正如您在这里看到的,您使用的是数据库中真正存在的列:
passwd
。
通过这种方式,您可以将带有密码的列命名为您想要的任何内容,并且您仍然可以为其使用默认的雄辩驱动程序。
我已经为它创建了非常简单的测试。
您只需将
app/routes.php
文件替换为以下文件:
Route::get('/', function () {
if (Auth::check()) {
echo "I'm logged in as " . Auth::user()->user_name . "<br />";
echo "<a href='/logout'>Log out</a>";
} else {
echo "I'm NOT logged in<br />";
Auth::attempt(array(
'user_name' => 'admin',
'password' => 'hardpass',
));
if (Auth::check()) {
echo "Now I'm logged in as " . Auth::user()->user_name . "<br />";
echo "<a href='/logout'>Log out</a>";
} else {
echo "I'm still NOT logged in<br />";
}
}
});
Route::get('/logout', function () {
Auth::logout();
return "You have been logged out";
});
Route::get('/db', function () {
if (!Schema::hasTable('users')) {
Schema::create('users', function ($table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('user_name', 60)->unique();
$table->string('passwd', 256);
$table->rememberToken();
$table->timestamps();
});
DB::table('users')->insert(
[
[
'user_name' => 'admin',
'passwd' => Hash::make('hardpass'),
]
]
);
}
echo "Table users has been created";
});
在app/config/database.php中创建空数据库并设置连接数据
该溶液在Larave 4.2.9(如上所述)和Laravel 5中进行了测试。在Laravel5中,所有操作都是一样的,但您当然需要编辑不同路径中的文件:
用户
模型在app/User.php
file
- 路由在
app/Http/routes.php
文件 - 数据库配置文件在
config/database.php
file
问题内容: 我想在使用Laravel身份验证时更改数据库中的密码字段。我希望表中的列具有名称而不是。我试图运行这样的事情: 但这不起作用。 我还尝试在模型中添加以下功能: 但它也没有改变。用户仍未通过身份验证。Laravel中可以更改数据库中的密码字段名称吗? 问题答案: 您可以轻松更改数据库中的所有其他字段并将其用于身份验证。唯一的问题是领域。 实际上,字段在Laravel中以某种方式进行了硬编
于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,
我正在使用fire base制作一个反应原生应用程序,用于使用电子邮件登录im并通过身份验证。但是,有没有办法使用用户名和密码登录?
客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢
我们正在研究在我们的应用程序中实施基于SAML的SSO身份验证,我想知道是否可以通过SAML指定自定义重定向URL。换句话说,我们可以在身份提供者中配置一个服务提供者,并让服务提供者通过SAML请求指定身份提供者在登录后应将用户重定向到哪里? 我们之所以要寻找这样的东西,是因为我们的应用程序运行在不同的服务器上,这取决于它们所处的开发阶段(开发、测试、暂存、生产)。如果我们不必为要迁移到SAML
我正在创建一个laravel应用程序与自定义多重身份验证。我正在跟随这篇文章进行多重身份验证。https://pusher.com/tutorials/multiple-authentication-guards-laravel 我已经创建了登录和注册控制器定义的警卫和提供者,一切正常,我能够注册用户并登录他们。我写了一页(http://127.0.0.1:8000/admin)只有当管理员登录时