加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel 5.1 bcrypt并登录

发布时间:2020-12-14 19:36:54 所属栏目:大数据 来源:网络整理
导读:当我在Laravel框架中注册一个新用户时,我现在正在这样做, // Creating a new user$user = new User;$user-firstname = $data['firstname'];$user-lastname = $data['lastname'];$user-email = $data['email'];$user-password = bcrypt($data['password']);$u
当我在Laravel框架中注册一个新用户时,我现在正在这样做,

// Creating a new user
$user = new User;
$user->firstname = $data['firstname'];
$user->lastname = $data['lastname'];
$user->email = $data['email'];
$user->password = bcrypt($data['password']);
$user->save();

这很好用,我可以登录到该应用程序.但是,我希望用户可以选择在其设置页面中更改其密码.这样做,我使用相同的技术,使用

$newPass = bcrypt($response->new_password);

并更新用户字段.但是,这样做之后,我无法登录?我在laravel中使用内置身份验证服务进行注册/登录.

我在这做错了什么?我应该采取另一种方式吗?

我还试图加密我当前的密码,并且我获得了与存储在数据库中的哈希完全不同的哈希.

这太混乱..

更新了控制器代码,

// Validation
$this->validate($request,[
    'email' => 'email','password' => 'min:8|confirmed','current_password' => 'required',]);

// Getting the user ID
$userId = Auth::id();

// Dummy hack check,change later.
if(!Auth::attempt(['id' => $userId,'password' => $request->current_password]))
{
    return redirect('settings')->with('alert','current password is wrong.');
}

// Everything is validated and ok to proceed
if($request->email)
{
    $data['email'] = $request->email;
}

if($request->password)
{
    $data['password'] = bcrypt("helloworld");
}

$user = User::where('id',$userId)->update($data);

dd($data);

转储输入的数据,

+request: ParameterBag {#40 ▼
    #parameters: array:5 [▼
      "_token" => "JQIIuCjiKQmbK0X5zCM6czYD1vIoh4PGjLO4qrFm"
      "email" => "testing@gmail.com"
      "password" => "thisisnewpass"
      "password_confirmation" => "thisisnewpass"
      "current_password" => "helloworld"
    ]
  }

解决方法

此代码更接近Laravel如何处理内部重置用户密码的方式.试试看.

// Getting the User
$user = Auth::user(); // Gets the currently logged in User
$credentials = [
    'id' => $user->id,'password' => $request->input('current_password')
];

// Make sure current password is correct
if (!Auth::validate($credentials)) { // Checks the User's credentials
    return redirect('settings')->with('alert','current password is wrong.');
}

// Change the password
if ($request->has('password')) {
    $user->password = bcrypt($request->input('password'));
}

// Save any changes
$user->save();

看起来您使用相同的表单来更新用户的电子邮件地址,因此请更新代码以满足您的需求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读