Rails 5:注册并使用Ajax登录

时间:2018-11-19 19:12:45

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

我有一个Rails应用程序,已通过ajax进行了devise注册。我用this post完成了。注册正在进行,但仍在重定向到root_url,注册后未登录用户。

我需要的是在不重新加载页面的情况下不要重定向并登录用户。

有人完成吗?

我的表单:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => {:id => "login-box", :class => "contact-form", :'data-type' => 'json'}, :remote => true ) do |f| %>

  <%= devise_error_messages! %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email", required: true %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "new-password", required: true %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

javascript:

$(document).on('ajax:success', '#login-box', function(e) {

  });

  $(document).on('ajax:error', '#login-box', function(event, xhr, settings, exceptions) {
      var error_messages;

      error_messages = xhr.responseJSON['error'] ? "<div class='alert alert-danger pull-left'>" + xhr.responseJSON['error'] + "</div>" : xhr.responseJSON['errors'] ? $.map(xhr.responseJSON["errors"], function(v, k) {
           return "<div class='alert alert-danger pull-left'>" + k + " " + v + "</div>";
         }).join("") : "<div class='alert alert-danger pull-left'>Unknown error</div>";
         return $('#login-box').prepend(error_messages);
  });

然后将这段代码放在我的自定义设备控制器(会话和注册)上

respond_to :html, :json

谢谢!

0 个答案:

没有答案