だから私はかなり奇妙な問題があります。ユーザーがパスワードを変更できるフォームを作成しました。Laravel 5.2 - パスワードを変更するための認証されたユーザー - 更新後のパスワードマッチング問題
パスワードは変更されます。しかし、Laravelが明らかに認識できないものにパスワードを変更します。
"tinker"を使って手動でパスワードを "testing"のように更新する場合は、私は正常に私のパスワードを変更することができるだろう。しかし、パスワードを何か(たとえば123456など)に変更すると、フォームはパスワードを受け入れなくなります。
ユーザからログアウトして新しいパスワードでログインしようとすると、それは私にログインさせてもらえません。
明らかにLaravelは新しいパスワードを認識していません。
コードはここにある:
ビュー:
<div class="panel panel-default">
<div class="panel-heading">Change Your Password</div>
{{ Form::open(array('url' => 'security/change_password')) }}
<div class="form-group">
{!! Form::label('current_password', 'Enter Current Password:') !!}
{!! Form::text('current_password', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Enter New Password:') !!}
{!! Form::text('password', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password_confirmation', 'Confirm New Password:') !!}
{!! Form::text('password_confirmation', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit('Change Password', ['class' => 'btn btn-primary form-control']) !!}
</div>
{!! Form::close() !!}
</div>
コントローラー:
public function updatePassword(UserSecurityFormRequest $request)
{
$user = Auth::user();
$current_password = $request->input('current_password');
$new_password = $request->input('password');
if (Hash::check($current_password, $user->password)) {
$user->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
else{
return ('Please enter the correct password');
}
}
は、私はまた、ユーザーにパスワードの属性を設定しようとしました。..
public function setPasswordAttribute($password)
{
return $this->attributes['password'] = bcrypt($password);
}
それはworをしなかったk。 (編集:私は上記の属性を削除しました)登録フォーム(Laravelのデフォルト認証システムの一部として)がログインフォームが認識するパスワードを作成できないようなものがあれば。
私はフォームが正しい詳細を提出していることを確認しました。私は、フォームが正常に送信されたときにフォームの入力からすべてのデータをダンプすることでこれを行いました。
ユーザーモデル:
<?php
名前空間のApp。 carbon \ carbonを使用します。
Illuminate \ Foundation \ Auth \ UserをAuthenticatableとして使用します。 // App \ Http \ Controllers \ traits \ HasRolesを使用します。あなたが見ることができるように
クラスのユーザーは、認証可能 {
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
//If register dont work or passwords arent being recognised then remove the following:
/* public function setPasswordAttribute($password)
{
return $this->attributes['password'] = bcrypt($password);
}*/
//turns dates to carbon
protected $dates = ['created_at'];
//Creates Many to Many Relationship between Users table (and model) and Roles Table (and model)
public function roles()
{
return $this->belongsToMany(Roles::class);
}
//Checks for a specific role
public function hasRole($role)
{
if(is_string($role))
{
return $this->roles->contains('name', $role);
}
return !! $role->intersect($this->roles)->count();
}
//gives the user the role
public function assignRole($role)
{
return $this->roles()->save(
Roles::whereName($role)->firstOrFail()
);
}
//Checks whether the user has a role with that permission
public function hasPermission($permission)
{
return $this->hasRole($permission->roles);
}
public function owns($related)
{
return $this->id === $related->user_id;
}
}
を拡張することがそれに影響を与えるべきではないので、私はパスワードの属性セッターをコメントアウトしました。それでもまだ動作しません。
ご協力いただければ幸いです。
ありがとうございます。
EDIT
それが機能していません。最初 パブリック関数updatePassword(UserSecurityFormRequest $リクエスト) {
$user = Auth::user();
$hashed_password = Auth::user()->password;
$current_password = $request->input('current_password');
$new_password = $request->input('password');
if (Hash::check($current_password, $hashed_password)) {
$user->fill([
'password' => Hash::make($request->password)
])->save();
}
else{
return ('Please enter the correct password');
}
}
'User'モデルコードを投稿してください。あなたの 'password'属性は' $ fillable'属性の属性にありますか?そうしないと、あなたが投稿したこのコードは動作しません。 –
ユーザモデルコードが掲載されています。 "パスワード"は実際に$ fillablesプロパティにあります。まだ運がありません。 –