通过设计登录无效

时间:2014-06-11 09:10:10

标签: ruby-on-rails angularjs devise

我正在使用带有角度js的rails app进行身份验证,我正在使用设计宝石。当我提交登录表单时,我无法登录,重定向到同一页面。

app / views / devise / sessions / new.html.erb

       <form class="form-horizontal">
                <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
                <fieldset>
                    <div class="form-group">
                      <div class="input-group input-group-lg">
                          <span class="input-group-addon">
                              <span class="glyphicon glyphicon-envelope"></span>
                          </span>
                                <%= f.email_field :email, autofocus: true , class: 'form-control', placeholder: 'Email'%>
                        </div>
                    </div>  

                    <div class="form-group">
                        <div class="input-group input-group-lg">
                            <span class="input-group-addon">
                                <span class="glyphicon glyphicon-lock"></span>
                            </span>
                            <%= f.password_field :password, autocomplete: "off" , class: 'form-control', placeholder: 'Password'%>
                        </div>
                    </div>

                    <div class="form-group">

                        <%= button_tag(type: 'submit', class: "btn btn-primary btn-lg btn-block") do %>
                             Login
                        <% end %>
                   </div>

                </fieldset>
                <% end %>
            </form>

任何人都可以解释我犯错误的地方吗?

3 个答案:

答案 0 :(得分:1)

你肯定错过了添加..

before_filter :authenticate_user!
控制器中的

答案 1 :(得分:0)

<强>错误

您遇到的问题是您的表单出错,并且设计使用<%= devise_error_messages! %>登录表单(并且不能立即使用)。

您可能会收到登录尝试中的错误,但由于您无法在视图中看到错误,因此似乎就像您被重定向回登录页面一样。< / p>

-

<强>测试

测试此方法的一个好方法是将其放在sessions/new.html.erb文件中:

<% if user_signed_in? %>
 SIGNED IN
<% else %>
 NOT SIGNED IN
<% end %>

这将显示是否已为用户创建session(I.E他们已登录)。如果没有,我建议你有错误,你无法看到

-

<强>修正

如果问题是您收到错误,修复它们的方法是使用其中一种方法在您的视图中显示它们。我们之前使用this question创建了这个:

#app/views/devise/sessions/new.html.haml
= form_for resource, as: resource_name, url: session_path(resource_name), remote: request.xhr? do |f|
    = devise_error_messages!

#app/helpers/devise_helper.rb
Module DeviseHelper

  def devise_error_messages!
    flash_alerts = []
    error_key = 'errors.messages.not_saved'

    if !flash.empty?
      flash_alerts.push(flash[:error]) if flash[:error]
      flash_alerts.push(flash[:alert]) if flash[:alert]
      flash_alerts.push(flash[:notice]) if flash[:notice]
      error_key = 'devise.failure.invalid'
    end

    return "" if resource.errors.empty? && flash_alerts.empty?
    errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages

    messages = errors.map { |msg| content_tag(:li, msg) }.join
    sentence = I18n.t(error_key, :count    => errors.count,
                                 :resource => resource.class.model_name.human.downcase)

    html = <<-HTML
    <div id="error_explanation">
      <h2>#{sentence}</h2>
      <ul>#{messages}</ul>
    </div>
    HTML

    html.html_safe
  end
end

答案 2 :(得分:0)

  

问题在于我们正在使用form_for并形成两者。我忘了更新答案。使用一件事可以解决我的问题。谢谢你试图帮助我。*