【发布时间】:2016-09-25 10:25:02
【问题描述】:
My Rails 5 App 仅允许管理员或支持用户创建用户,创建用户时会生成密码并通过电子邮件发送给用户,在第一次用户登录时,应用程序会强制他们更改密码。
我的架构中有一个 password_updated 字段,我希望在更新密码时将其填充为真,但是我在这里碰壁,不确定它的编码器眼睛是否,我只是看不出我哪里出错了。
我的应用程序控制器:
# Force User To Change Password On First Login
def after_sign_in_path_for(resource)
if current_user.password_updated == "false"
edit_passwords_path
else
authenticated_root_path
end
end
我已经设置好了,如果用户试图跳过或跳过密码更改,他们将被重定向到密码更改。
我的密码控制器:
class PasswordsController < ApplicationController
def edit
@user = current_user
end
def update
if current_user.update_with_password(user_params)
current_user.password_updated = "true"
flash[:notice] = 'Your Password Has Been Sucessfully Updated.'
redirect_to authenticated_root_path
else
flash[:error] = 'Oh No! Something Went Wrong, Please Try Again.'
render :edit
end
end
private
def user_params
params.require(:user).permit(:password_updated, :current_password, :password, :password_confirmation)
end
end
最初我让应用程序控制器查看登录计数,但是如果用户关闭并等待足够长的时间,他们可以重新登录而不必更改密码。我觉得这个风险更大。
这里的任何帮助将不胜感激。
【问题讨论】:
-
password_updated在 DB 中是布尔值还是字符串? -
@Aleksey 它是一个字符串,如有必要我可以轻松将其更改为布尔值
-
这不是必需的,但我认为这会很好。只是我的建议 =)
-
好吧我可以改变它,无论哪种方式仍然无法正常工作lol..
-
我不知道它只是通过更改就可以工作)现在我正在检查您的代码。
标签: ruby-on-rails ruby-on-rails-4 devise