对于没有密码的现有用户,设计密码令牌无效

时间:2018-01-24 03:53:58

标签: ruby-on-rails devise

尝试为没有安装设备的用户设置密码(安装设备之前用户已经存在),设计会返回令牌错误。

控制器动作:

  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'
              }

这是为没有密码的现有用户创建密码的正确方法吗?

1 个答案:

答案 0 :(得分:0)

我建议首先进行迁移以更新密码,因为“在安装设备之前用户已经存在”。在rails控制台中,尝试:

user.update(password:"newpass", password_confirmation:"newpass")

您可以为大量用户创建rake任务。然后使用表单进行更新就可以了。