- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下文件来更新用户详细信息。他们目前适用于除密码以外的所有内容。所有逻辑都正常工作,我已经使用 puts
检查是否输入了正确的逻辑部分,但是当 @user.update( user_params)
被调用。
为了让它工作,我必须将下面的两行添加到 UserController 的密码逻辑中,这似乎不合逻辑,因为我进一步调用了 @user.update(user_params)
使用提供的用户参数更新用户。任何意见、建议或意见将不胜感激。
@user.password = params[:user][:password]
@user.save
我没有使用任何 Gems 等进行身份验证,我的用户表如下所示
create_table "users", force: :cascade do |t|
t.string "username"
t.string "password_digest"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.string "title"
t.string "firstName"
t.string "surname"
t.index ["username"], name: "index_users_on_username", unique: true
end
用户 Controller
class UsersController < ApplicationController
skip_before_action :authorized, only: [:new, :create]
before_action :set_user, only: [:update]
def new
@user = User.new
end
def create
@user = User.create(params.require(:user).permit(:username, :password))
session[:user_id] = @user.id
redirect_to '/welcome'
end
def update
errorMessage = ''
if current_user.username != params[:user][:username]
if User.find_by(username: params[:user][:username]).nil?
else
errorMessage += "Username is already taken"
end
else
end
if !params[:user][:password].blank?
if @user.authenticate(params[:user][:password_confirmation])
else
errorMessage += "Confirmation password is incorrect"
end
else
end
if !errorMessage.blank?
redirect_to account_path, notice: errorMessage
else
@user.update(user_params)
redirect_to account_path
end
end
private
def user_params
params.require(:user).permit(:username, :title, :firstName, :surname,:password, :password_confirmation)
end
def set_user
@user = current_user
end
end
edit.html.erb
<p id=”notice”><%= notice %></p>
<%= form_for current_user do |f|%>
<div class="form-group row col-md-12">
<%= f.label :username, class:"col-sm-2 col-form-label"%><br>
<%= f.text_field :username, class:"form-control col-sm-10" %>
</div>
<div class="form-group row col-md-12">
<div class="col-md-2">
<%= f.label :title%><br>
<%= f.text_field :title, class:"form-control" %>
</div>
<div class="col-md-5">
<%= f.label :firstName, "First Name" %><br>
<%= f.text_field :firstName, class:"form-control" %>
</div>
<div class="col-md-5">
<%= f.label :surname %><br>
<%= f.text_field :surname, class:"form-control" %>
</div>
</div>
<div class="form-group row col-md-12">
<div class="col-md-6">
<%= f.label :password_confirmation, "Current Password"%><br>
<%= f.password_field :password_confirmation, class:"form-control" %>
</div>
<div class="col-md-6">
<%= f.label :password, "New Password"%><br>
<%= f.password_field :password, class:"form-control" %>
</div>
<small id="passwordHelpBlock" class="form-text text-muted col-md-12">
To update your password, please confirm your current password.
</small>
</div>
<%= f.submit "Submit" ,class: "btn btn-primary"%>
<% end %>
用户模型
class User < ApplicationRecord
has_secure_password
end
最佳答案
您的 Controller 有点复杂,我认为这是导致您出现问题的原因。您应该在 View 中输出错误以查看出了什么问题,不幸的是,这不是您问题的一部分。
不过,一般来说,有两个选项可以使 bcrypt ruby Github repository 中描述的工作正常进行.请注意,我没有尝试使用 current_user
、params[:user]
和 @user.authenticate
来消除复杂性并专注于 bcrypt 主题。
像这样在您的用户模型中使用 has_secure_password
:
class User < ApplicationRecord
has_secure_password
end
您需要密码摘要列,并且需要在 user_params 方法中使用 :password
。
def user_params
params.require(:user).permit(:username, :title, :firstName, :surname, :password, :password_confirmation)
end
输入的密码将保存在数据库中的password_digest
列中。
这在 the-user-model part of the bcrypt Github page 上有描述.
在这种情况下,您不使用 has_secure_password
,而是将以下代码添加到您的用户模型中:
class User < ApplicationRecord
include BCrypt
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
end
然后你的user_params
方法需要反射(reflect):password_hash
属性名:
def user_params
params.require(:user).permit(:username, :title, :firstName, :surname, :password_hash, :password_confirmation)
end
在这种情况下,您的数据库需要一个 password_hash
列而不是 password_digest
才能使用上面的示例代码使其正常工作。当然,你也可以重新使用password_digest
代替password_hash
,然后将上面代码中的password_hash
替换为password_digest
.
在这两种情况下,我都像您使用 password
字段一样使用 View :
<div class="form-group row col-md-12">
<div class="col-md-6">
<%= f.label :password, "New Password"%><br>
<%= f.password_field :password, class:"form-control" %>
</div>
</div>
我测试中的 Controller 如下所示:
def update
if @user.update(user_params)
redirect_to @user, notice: 'User was successfully updated.'
else
render :edit
end
end
我还使用带有 has_secure_password
的选项 1 将这个小测试 Rails 应用程序添加到 Github 存储库 @ https://github.com/cadamini/rails-bcrypt-ruby-test
关于ruby-on-rails - 如何在 Rails 中使用 password_digest 和 form 更新用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479353/
Internal Server Error: /admin/account/customuser/add/ Traceback (most recent call last): File "C:\
有问题!虽然我发现几乎相似的线程但没有帮助:( 我编写了一个 php 脚本来从我的 MySQL 数据库中获取注册用户的数量。该脚本在我的本地主机上运行良好;它使用给定的用户名、密码和主机名,分别是“r
我正在做一项基于密码的作业,我将 key 和消息放在单独的数组中。我想创建第三个数组,其中包含围绕消息大小的 key ,如下所示: message keykeyk 我已经在这个问题上苦苦挣扎了一段时间
我的几个客户要求我实现图形密码检查器,例如 关于如何实现这种 UI 有什么想法吗? 最佳答案 试着看看这个:https://code.google.com/p/android-lockpattern/
我正在使用 MAMP,每次登录 phpMyAdmin 时,都会收到以下错误/警告消息: the configuration file now needs a secret passphrase (bl
我正在尝试通过将 Visual Studio 2013 连接到我的测试机来调试 WDF 驱动程序。它创建一个名为 WDKRemoteUser 的用户,并在进行测试时尝试自动登录。有人知道这个用户的密码
使用具有指定用户名和密码的 SVN 提交。我希望服务器抛出错误;所以我可以告诉我的用户他/她的密码错误。 相反,在使用错误密码提交后: svn commit "test_file.txt" --use
我正在尝试实现 friend 推荐。 它从节点“你”开始。而且,我想找到节点“安娜”。 换句话说,这是我的两个或更多 friend 共同认识的人。上面的示例节点是 Anna。 如果您的帮助,我将不胜感
我都尝试过 wget --user=myuser --password=mypassword myfile 和 wget --ftp-user=myuser --ftp-password=mypass
我的一位用户提示说,每当他尝试使用默认管理界面(Django 的管理员)添加新用户(auth.User)时,新用户名和密码都会自动填充他自己的。 问题是他在登录时要求 Firefox 记住他的用户名/
我们正在开发一款应用(当然)用于应用购买 (IAP)。我已完成指南中的所有操作以启用 iap,并且一切正常,直到我想要购买为止。 部分代码: MainViewController.m -(vo
我试图创建两个可选匹配项的并集(如下所示),但我得到的不是并集,而是两者的交集。我应该如何更改此查询以获得所需的联合? optional match (a:PA)-[r2:network*2]-(b:
我想将Ansible用作另一个Python软件的一部分。在该软件中,我有一个包含其用户名/密码的主机列表。 有没有一种方法可以将SSH连接的用户/密码传递给Ansible ad-hoc命令或以加密方式
嗨,我在使用xampp的Apache Web服务器上收到错误500。直到我使用.htaccess,.htpasswd文件,错误才出现。我搜索了,但找不到语法错误。我只有1张图片和要保护的索引文件。以下
我一直使用它来编辑用户帐户信息: $this->validate($request, [ 'password' => 'min:6', 'password_confirmation'
我需要使用InstallUtil来安装C# Windows服务。我需要设置服务登录凭据(用户名和密码)。这一切都需要默默地完成。 有没有办法做这样的事情: installutil.exe myserv
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
如果我有一个随机的、16 个字符长的字母数字盐(不同大小写),它是为每个用户生成和存储的,我是否还需要一个站点范围的盐? 换句话说,这样好吗? sha1($user_salt . $password)
我正在开发一个空白程序,该程序将允许用户创建一个帐户,以便他们可以存储其余额和提款/存款。用户输入用户名和密码后,如何存储这些信息以便用户可以登录并查看其余额?我不一定要尝试使其非常安全,我只是希望能
我正在尝试寻找一种通用方法来搜索没有链接到另一个节点或节点集的节点或节点集。例如,我能够找到特定类型(例如 :Style)的所有节点,这些节点以某种方式连接到一组特定的节点(例如 :MetadataR
我是一名优秀的程序员,十分优秀!