使用laravel更改密码API

jv4diomz  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(140)

我写的代码没有错误,但是接收邮件的用户的密码没有改变,改变的只是用户表中第一个用户的密码,不管我怎么试,都不能成功。
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'
 
    ];
}

我已经分享了我所有的相关文件,如果有人能帮忙,谢谢你。

ajsxfq5m

ajsxfq5m1#

在模型中查看代码时,您忽略了一件事,您没有将password属性放在protected $fillable变量中。
尝试这样做:

protected $fillable = [
    'email',
    'token',
    'created_at',
    'password'
];

另外,也许你不需要把created_at变量放在数组中。

相关问题