仅限电子邮件注册不显示密码设置视图

时间:2015-11-29 12:20:42

标签: ruby-on-rails ruby-on-rails-4 devise

我正在使用设计3.5.2和rails 4.2.1 我遵循了Email-Only-Sign-Up,但在信息流中我有些不了解。

我已更新了我的观看/设计/注册/ new.html.erb文件,并仅请求发送电子邮件以开设帐户。

我没有触及我的confirmations_instructions.html.erb邮件程序,但更新了上述路由并覆盖了Devise ConfirmationController(我使用了Rails 4,Devise 3代码)和User模型。

我可以创建一个没有密码的帐户来自我更新的views/devise/registrations/new.html.erb,我收到了我未经修改的确认邮件邮件,当我点击链接时,我到达/users/confirmation?confirmation_token=xxxxx并由我的ConfirmationsController处理#show方法这对我的技能水平来说仍然有点复杂。

我希望能够使用我创建的新视图/ devise / confirmations / show.html.erb文件来保留我的令牌并允许我的用户设置密码。提交按钮将确认我的用户。

而不是那个,然后直接发送令牌,我的用户被确认,我登陆我的登录页面。

以下是我的路线:

  

user_confirmation POST /users/confirmation(.:format)   确认#create new_user_confirmation GET   /users/confirmation/new(.:format)确认#new GET   /users/confirmation(.:format)确认#show confirm PATCH   /confirm(.:format)确认#confirm

自定义ConfirmationController是维基页面的复制粘贴,视图是自定义的,但不应影响整个过程。我的routes.rb文件已经像上面提到的那样更新了,比如我添加了password_match的用户模型?和password_required?方法(那里只有我的设计模块声明,很少有has_many has_one关系...)。

如果有人可以帮助我^^

2 个答案:

答案 0 :(得分:0)

您需要在确认令牌的表单中添加passwordpassword_confirmation字段。

应用/视图/确认

= form_for(resource, :as => resource_name) do |f|
        = f.password_field :password, class:"password-field", placeholder: "New password"
        = f.password_field :password_confirmation, class:"password-field", placeholder: "Confirm new password"
        = f.hidden_field :confirmation_token, value: @original_token
        = f.submit "Confirm account and create password"

有关详细步骤,请使用此documentation.

答案 1 :(得分:0)

我创建了一个views / devise / confirmations / show.html.erb文件:

  <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

    <div class="row">
      <div class="col-md-4 my_label">
        <%= f.label :password %>
      </div>
      <div class='col-md-8 my_field'>
        <%= f.password_field :password, autocomplete: "off", class: 'form-control', placeholder: 'mypassword'  %>
      </div>
    </div>  

    <div class="row">      
      <div class='col-md-4 my_label'>    
        <%= f.label :password_confirmation %>
      </div>
      <div class='col-md-8 my_field'>          
        <%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control', placeholder: 'mypassword'  %>
      </div>
    </div>  

    <%= f.input :confirmation_token, :as => :hidden, :input_html => { :value => @original_token } %>

    <div class="row actions">
      <div class='col-md-4'></div>
      <div class='col-md-8 center-block'>
        <%= f.submit("Create my Account", class: "btn btn-success button_submit") %><br>
        <%= render "devise/shared/links" %>
      </div>  
    </div>
  <% end %>

我希望这可行,但我的问题是,当我点击确认邮件中的链接时,它没有映射到此视图,我不知道为什么。当我读取我的日志时,我知道令牌由ConfirmationController#show方法处理,但它没有显示show view ...