【问题标题】:Sorcery and Simple Form implementation巫术和简单形式的实现
【发布时间】:2012-03-10 20:49:57
【问题描述】:

长期读者第一次使用。 我正在整理我的第一个 RoR 应用程序,并将我的应用程序应该使用的所有内容隔离到:-

  • 巫术
  • Omniauth
  • 可以可以
  • twitter-bootstrap(转换为 sass)

和简单的形式。

干净,清晰,简单....不是。

我一生都无法将简单的表单与巫术“登录”集成(这似乎是最简单的任务)而不会在“remember_me”字段上出现错误。

简单表单没有 simple_form_tag(仅 simple_form_for)选项,该选项在会话控制器新方法的登录表单上效果最佳。相反,我必须在该方法中创建一个 @user 实例,但随后在“remember_me”字段“未定义方法 `remember_me'”上出现错误

任何帮助将不胜感激。

我的意思是非常好!提前致谢:)

sessions/new.html.erb

<% provide :title, "Log in" %>
<h1>Log in</h1>
<%= simple_form_for @user, :html => { :class => 'form-horizontal' } do |f| %>
  <fieldset>
    <legend>Login</legend>

    <%= f.input :email, input_html: { :maxlength => 100 } %>
    <%= f.input :password, input_html: { :maxlength => 20 } %>
    <%= f.input :remember_me, as: :boolean %>


    <div class="form-actions">
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to 'Cancel', users_path, :class => 'btn' %>
    </div>
  </fieldset>
<% end %>

    class SessionsController < ApplicationController
  def new
    @user = User.new
  end

【问题讨论】:

    标签: twitter-bootstrap omniauth cancan simple-form sorcery


    【解决方案1】:

    documentation 说:

    form_tag(url_for_options = {}, options = {}, &block)
    Starts a form tag that points the action to an url configured with url_for_options just 
    like ActionController::Base#url_for. The method for the form defaults to POST.
    

    这表明form_tag 旨在将数据直接发送到另一个 URL,由控制器操作处理。事实上,在 RailsTutorial signin form 中,Michael Hartl 使用 form_for 函数而不是 form_tag。

    form_for(:session, url: sessions_path)
    

    基本上,这个想法是您发送数据以某种方式由控制器处理,而不是写入数据库。由于我们没有用户会话模型,我们必须使用 :session 符号而不是 @session 并告诉表单它应该将数据发布到哪里(哪个 URL)。

    虽然我不确定,但我怀疑这也适用于simple_form_for。比如:

    <%= simple_form_for(:session, url: sessions_path) do |f| %>
    

    更新:我成功地将示例应用的reference implementation 更改为使用simple_form_for 来创建新的用户会话。

    当然,假设 Sessions 控制器正在处理您的登录,并且它有一个响应 POST 的方法(可能是create)。该控制器操作是您应该处理 Sorcery 登录的地方。

    这里是 form_for 的 Rails 文档,如果您好奇的话。

    【讨论】:

    • 关于如何将其与 omniauth-identity 一起使用的任何想法?我试过codesimple_form_for(:user, url: "/auth/identity/register")/code
    • 关于如何将其与 omniauth-identity 一起使用的任何想法?我试过simple_form_for(:user, url: "/auth/identity/register")。用户控制器def new @user = env['omniauth.identity'] || User.new end。型号/user.rb class User &lt; OmniAuth::Identity::Models::ActiveRecord。这“似乎”在本地工作,但不适用于 heroku,ActionController::RoutingError (No route matches [POST] "/auth/identity/register"): 出错
    • 如果可以,请尝试删除您的第一条评论,因为它没有像您预期的那样完成。我不知道为什么它会正常工作并在 Heroku 上给你一个路由错误。您应该在本地和 Heroku 上运行 rake routes 作为调试步骤。我真的建议您将此作为一个新问题发布,以让某人有机会在他们帮助您时获得完整的声誉。如果您选择的答案有帮助,也很高兴为您投票。
    • thankx jrhorn,我在这里提出了一个问题link。仅供参考,两条路线是相同的。最后......呵呵,我不知道如何删除我的第一次评论尝试。我说我最多有 5 分钟超时。 (或者是因为我按回车键尝试返回)呵呵不记得了。再次加油 JR
    • @gittinOld 没问题。祝你好运!
    【解决方案2】:

    我也在尝试这样做,但被卡住了。似乎这应该可以,但是当我提交登录表单时会导致错误。这是我的表单的样子:

    <h1>Log in</h1>
    
    <%= simple_form_for(:session, url: sessions_path) do |f| %>
    
        <%= f.error_notification %>
    
        <%= f.input :email %>
        <%= f.input :password %>
        <%= f.input :remember_me, :as => :boolean %>
    
        <div class="form-actions">
        <%= f.submit "Login", :class => 'btn btn-primary' %>
        </div>
    <% end %>
    
    <%= link_to 'Forgot Password?', new_password_reset_path %>
    

    不知道如何使这项工作。我的调试输出显示表单正在尝试发送正确的数据:

    --- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
    utf8: ✓
    authenticity_token: wGdDEmG91p7RHzWZKLGgMQvKD+XupS1Z557vNDDG6GM=
    session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
      email: lee@example.com
      password: test
      remember_me: '1'
    commit: Login
    action: create
    controller: sessions
    

    另外,我在控制台中收到此错误:

    gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms)
    

    但我的routes.rb 文件中有resources :sessions。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多