所以今天我试着在我的laravel项目中修改默认的auth。首先:Composer(1.4.2)和Laravel(5.4.27)(也意味着所有的依赖关系)是最新的。我证实了这一具有:Laravel 5.4,重命名用户表列
Schema::table('users', function (Blueprint $users){
$users->string('login', 16)->unique()->after('id');
$users->string('real_name', 32)->after('email');
});
Schema::table('users', function(Blueprint $users){
$users->dropColumn([
'name'
]);
});
的是,重要的是,我想用“登录”而不是“名称:
composer self-update
composer update
然后,我通过迁移改变了用户表”。
我做下一件事是修改用户类,如下所示:
protected $fillable = [
'login',
'email',
'real_name',
'password'
];
protected $primaryKey = 'login';
public function getAuthIdentifierName()
{
return 'login';
}
而且还LoginController中:
public function username()
{
return 'login';
}
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
'g-recaptcha-response' => 'required|captcha'
]);
}
最后我改变登录视图:
<div class="form-group{{ $errors->has('login') ? ' has-error' : '' }}">
<label for="login" class="col-md-4 control-label">Login</label>
<div class="col-md-6">
<input id="login" type="text" class="form-control" name="login" value="{{ old('login') }}" required autofocus>
@if ($errors->has('login'))
<span class="help-block">
<strong>{{ $errors->first('login') }}</strong>
</span>
@endif
</div>
</div>
现在我应该h一个有效的身份验证,对吧?我也这么想。
登录本身有效,但是当涉及到读取字段'login'的值时它失败 - 或者类似的东西。
调试吧给我讲了:
将在登录时执行的是查询:
select * from `users` where `login` = 'admin' limit 1
这是加载所有的数据正确,除了“登陆”的。出于某种原因,该场保持“0”(在AUTH网)
"user" => array:10 [
"id" => 1
"email" => "[email protected]"
"created_at" => "2017-06-16 03:08:43"
"updated_at" => "2017-06-16 03:08:43"
"login" => 0
"real_name" => "PolluX"
而且当它终于来显示默认的主页查看执行的查询是:
select * from `users` where `login` = '0' limit 1
我在Windows 10上使用XAMPP v3.2.2,PHP 7.1.1和10.2.6-MariaDB作为我的本地开发环境。我应该提到,我用最新稳定的MariaDB版本的新下载替换了此XAMPP版本的默认发行MariaDB。
(因为迁移的事情错)我还检查在计算器上,Laracasts等等权威性的事情多的职位,但没有发现任何职位,可能已经帮助了我。
例如https://laracasts.com/discuss/channels/laravel/change-name-column-to-username-in-auth
'protected $ primaryKey ='login';'删除那个,你的主键为** id ** ...同样适用于'getAuthIdentifierName()'方法。迁移:如果您已经有一些用户使用重命名方法,如果您没有任何用户并且您仍在开发中,则只需更改默认值就可以忘记新迁移。 – Kyslik
这样做,谢谢! :) – PolluX
@Kyslik留下您的评论作为回答!这样,更多的人有同样的问题可以更快地看到答案! – Jsleshem