问题描述
我的用户表中有一些用户,当我根据该邮件发送重置令牌到我的邮件时,我正在更新我的用户帐户密码(重置密码),这工作正常,但是当我想更新我的密码时,我需要传递这些字段 (password,password_confirmation,resetToken,email)[How i am passing]1。我需要的是当我想更新/重置我的密码时,它应该在不通过电子邮件的情况下进行更新。我怎样才能实现这件事(没有电子邮件我想更新),请帮帮我
ChangePasswordController.PHP
<?PHP
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\UpdatePasswordRequest;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\DB;
use App\Models\User;
class ChangePasswordController extends Controller
{
public function passwordResetProcess(UpdatePasswordRequest $request){
return $this->updatePasswordRow($request)->count() > 0 ? $this->resetPassword($request) : $this->tokenNotFoundError();
}
// Verify if token is valid
private function updatePasswordRow($request){
return DB::table('password_resets')->where([
'email' => $request->email,'token' => $request->resetToken
]);
}
// Token not found response
private function tokenNotFoundError() {
return response()->json([
'error' => 'Either your email or token is wrong.'
],Response::HTTP_UNPROCESSABLE_ENTITY);
}
// Reset password
private function resetPassword($request) {
// find email
$userData = User::whereEmail($request->email)->first();
// update password
$userData->update([
'password'=>bcrypt($request->password)
]);
// remove verification data from db
$this->updatePasswordRow($request)->delete();
// reset password response
return response()->json([
'data'=>'Password has been updated.'
],Response::HTTP_CREATED);
}
}
UpdatePasswordRequest.PHP
<?PHP
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdatePasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email'=>'required|email','password'=>'required|confirmed|required|regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/'
];
}
}
password reset table(Migration table)
<?PHP
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets',function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)