首页 > 解决方案 > 如何检查数据库中的用户密码是否为空并将该信息传递给 Vue 应用程序?

问题描述

这里的目的不是要知道用户的实际密码,而是要知道用户是否在数据库中设置了密码。我可以区分设置密码的用户,即密码!= null,与未设置密码的用户,即密码== null,在我的 Laravel 控制器中,但是当我尝试将用户列表传递给我的 Vue 应用程序时使用 axios.get 请求,所有密码都显示为“未定义”,即使数据库中有用户使用散列密码。以下是我的 Vue 代码示例:

axios.get('/admin/user')
  .then(function (response) {
    self.users = response.data;
    for(var i=0; i<self.users.length; i++) {
      console.log(self.users[i].password) // outputs 'undefined' for all user passwords instead of the hashed database passwords
    }
  })
  .catch(function (error) {
     // handle error
     console.log(error);
  });

上面的 /admin/user 在我的 web.php 中的路由目录中定义为:

Route::get('/admin/user', 'UserController@get');

就本示例而言,我的 UserController@get 函数定义为:

public function get()
    {
        $user = User::get();
        return response($user, 200);
    }

任何有关如何区分已设置和未设置密码的用户的建议将不胜感激。

标签: laravelvue.jsaxios

解决方案


正如评论中提到的@matiaslauriti,用户模型password在序列化期间删除了字段。因此,即使密码经过哈希处理,您也应该避免从服务器发送密码。在您的特定用例中,无需发送密码。您可以简单地检查是否在后端设置了密码并将此信息附加到响应对象。

public function get()
    {
        $user = User::get();
        if (empty($user->password)) {
            $user->isPasswordSet = false;
        } else {
            $user->isPasswordSet = true;
        return response($user, 200);
    }

推荐阅读