我正在尝试将旧的PHP / MySQL迁移到Laravel项目。由于许多原因,我不应该修改数据库表架构。我需要修改Laravel框架类。例如,我想强制Laravel Auth检查users.USER
大写列以返回用户,而不是users.user
。我需要知道Laravel框架的哪一部分检查users
数据库表或user
列。如何修改而不会破坏默认的Auth功能。
更具体地说:我想知道Laravel如何在/Vendor/laravel/framework/src/illuminate/Auth/EloquentUserProvider.php
第137 validateCredentials()
行中从数据库中检索数据。
答案 0 :(得分:2)
您将必须为表和关系创建所有模型。在模型上,您可以指定表名,如果不想,则不必重命名表。
例如。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
protected $table = 'users.USER';
}
答案 1 :(得分:2)
如果要在laravel应用程序上使用自定义数据库,只需为数据库的每个表创建一个模型,然后设置表名,主键和可填充属性。
此处更多信息Defining Models
如果运行命令php artisan make:auth
,但要使用其他表或字段而不是默认用户,并且在不破坏创建的Auth功能的情况下进行传递,则必须使laravel知道,请按照下面列出的步骤进行操作:
首先:为要用于身份验证的表创建模型。为此,请运行命令php artisan make:model FooUserTable
,其中'FooUser'是表的名称。
接下来,您必须在模型上设置表名,主键和可填写字段,例如以下行:
class FooUser extends Authenticatable{
protected $table = 'FooUser';
protected $primaryKey = 'foo_id_user'; // Place here the name of the id of your table
protected $fillable = [ // Insert here all the fillable fields of your users table
'field1',
'field2',
...
];
}
请注意,模型现在从Authenticatable而不是模型扩展,这是类Illuminate\Foundation\Auth\User
的别名。为了使其正常工作,只需将use Illuminate\Foundation\Auth\User as Authenticatable
放在文件顶部。
这很重要!:
为了使用另一个字段名作为密码,请将函数getAuthPassword
放入用户表的模型中,例如下面的行:
public function getAuthPassword(){
return $this->myPasswordField; // myPasswordField is the field on your users table for password
}
现在您已经准备好所有模型,可以进行下一步了。
第二个::必须在文件config > auth.php
上找到provider数组,并将model属性值更改为模型类名称,例如:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\FooUser::class, // Place here the name of your model
],
],
一切准备就绪。
第三步:现在,您必须找到位于app > http > controllers > auth > LoginController.php
和类中的默认Laravel Auth的控制器,只需添加一个名为{{1}的函数},返回用于auth操作的用户名,例如以下行:
username
刀片式登录模板注释::在登录刀片式模板中,您应该将用户名输入名称更改为新名称,并且密码字段名称仍必须为class LoginController extends Controller{
..... // don't change other functions
public function username(){ // add the function username
return 'YourUsernameField';
}
}
,这是因为laravel使用它进行验证,但是在内部它将使用您的自定义密码字段名称。
仅此而已。希望对您有帮助。
注意:切勿将文件编辑到供应商文件夹中!
有关更多信息,请阅读Manually Authenticating Users部分中的文档
所有这些都在Laravel 5.4和5.7版本上进行了测试。
答案 2 :(得分:1)
数据库相关问题/答案:
要从数据库方案中提取模型,可以使用以下软件包:
此软件包可以自动生成开始在Laravel中使用数据库所需的Eloquent模型。
它有一堆易于使用的命令,能够根据您的数据库方案创建模型。
用法
让我们从默认连接中搭建一些模型。
php artisan code:models
您可以像这样折叠特定的表格:
php artisan code:models --table=users
您还可以指定连接:
php artisan code:models --connection=mysql
如果使用的是MySQL数据库,则可以指定要支持的架构:
php artisan code:models --schema=shop
扩展/编辑身份验证功能
看看有关manually authenticating的官方文档。
如果在控制器中放置以下代码段:
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
如果需要指定要使用的属性,则可以使用以下内容:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
您还可以自行检查,然后直接使用以下代码登录代码:
Auth::login($user);
// Login and "remember" the given user...
Auth::login($user, true);
我在此处列出的所有内容都在上面有关验证用户身份的链接中。