我写的代码没有错误,但是接收邮件的用户的密码没有改变,改变的只是用户表中第一个用户的密码,不管我怎么试,都不能成功。
Api.php
Route::post('/forgetPassword',[UserController::class,'forgetPassword']);
Web.php
Route::get('/resetPassword',[UserController::class,'forgetPasswordLoad']);
Route::post('/resetPassword',[UserController::class,'resetPassword']);
AuthController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\Models\PasswordReset;
use Mail;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
#reset password
public function forgetPassword(Request $request)
{
try {
$user = User::where('email',$request->email)->get();
if (count($user)>0) {
$token = Str::random(40);
$domain = URL::to('/');
$url = $domain.'/resetPassword?token='.$token;
$data['url']=$url;
$data['email']=$request->email;
$data['title']="Password Reset";
$data['body']="Please click on below link to reset password";
Mail::send('API/forgetPasswordMail',['data'=>$data],function($message) use ($data){
$message->to($data['email'])->subject($data['title']);
});
$datetime = Carbon::now()->format('Y-m-d H:i:s');
PasswordReset::updateOrCreate(
['email'=>$request->email],
[
'email' => $request->email,
'token' => $token,
'created_at' =>$datetime
]
);
return response()->json(['success'=>true,'message'=>'Şifrenizi değiştirmek için lütfen mailinizi kontrol ediniz!']);
}else {
return response()->json(['success'=>false,'message'=>'Kullanıcı Bulunamadı']);
}
} catch (\Exception $e) {
return response()->json(['success'=>false,'message'=>$e->getMessage()]);
}
}
#reset password view load
public function forgetPasswordLoad(Request $request)
{
$resetData = PasswordReset::where('token',$request->token)->get();
if (count($resetData)>0) {
$user = User::where('email',$resetData[0]['email'])->get();
return view('API/resetPassword',compact('user'));
}else {
return view('API/404');
}
}
#reset password func
public function resetPassword(Request $request)
{
try {
$request->validate([
'password' => 'required|string|min:6|confirmed'
]);
$user = User::find($request->id);
$user->password =$request->password;
$user->save();
return "<h1>Şifreniz Başarıyla Değiştirildi.Mobil Uygulamaya Dönebilirsiniz</h1>";
} catch (\Exception $e) {
return response()->json(['success'=>false,'message'=>$e->getMessage()]);
}
// PasswordReset::where('email',$user->email)->delete();
}
}
resetPassword.blade.php
<h1>Proxima Doktor</h1>
<form method="POST">
@csrf
<h3>Password Reset</h3>
<p>Lütfen güçlü bir parola giriniz</p>
<p>Password</p>
<input type="hidden" name="id" value="{{$user[0]['id']}}">
<input type="password" name="password">
<i class="fa fa-eye-slash"></i>
<p>Password Again</p>
<input type="password" name="password_confirmation">
<i class="fa fa-eye-slash"></i>
<br><br>
<input type="submit">
</form>
PasswordReset.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PasswordReset extends Model
{
use HasFactory;
public $table = 'password_reset_tokens';
public $timestamps = false;
protected $primaryKey = 'email';
protected $fillable = [
'email',
'token',
'created_at'
];
}
我已经分享了我所有的相关文件,如果有人能帮忙,谢谢你。
1条答案
按热度按时间ajsxfq5m1#
在模型中查看代码时,您忽略了一件事,您没有将password属性放在protected $fillable变量中。
尝试这样做:
另外,也许你不需要把created_at变量放在数组中。