尝试为没有安装设备的用户设置密码(安装设备之前用户已经存在),设计会返回令牌错误。
控制器动作:
if @user.password.nil?
raw, hashed_token = Devise.token_generator.generate(User, :reset_password_token)
@user.reset_token = raw
@user.reset_password_sent_at = Time.now.utc
@user.save(validate: false)
@tok = raw
render :create_password, reset_password_token: raw
在表格中我有以下内容:
<%= form_for(@user, as: :user, url: password_path(@user), html: { method: :put }) do |f| %>
<!--devise_error_messages! -->
<%= f.hidden_field :reset_password_token, value: @tok %>
<div class="field">
<%= f.label :password, "New password" %><br />
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
<% end %>
<%= f.password_field :password, autofocus: true, autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Confirm new password" %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
<div class="actions">
<%= f.submit "Change my password" %>
</div>
<% end %>
当用户提交表单时,我收到无效的令牌错误。
我的路线设置如下
devise_for :users, controllers:
{
sessions: 'users/sessions',
registrations: 'users/registrations'
}
这是为没有密码的现有用户创建密码的正确方法吗?
答案 0 :(得分:0)
我建议首先进行迁移以更新密码,因为“在安装设备之前用户已经存在”。在rails控制台中,尝试:
user.update(password:"newpass", password_confirmation:"newpass")
您可以为大量用户创建rake任务。然后使用表单进行更新就可以了。