0

我正在尝试管理用户注册并使用omniauth 登录。我还想在用户向提供商授权后收集有关用户的更多信息。目前Vendor#from_omniauth返回现有供应商或已填充其身份验证哈希的新供应商记录。是否可以将新记录传递给供应商控制器,以便表单可以轻松使用它?

我正在使用 Rails 4。

class SessionsController < ApplicationController
  def create
    vendor = Vendor.from_omniauth(env["omniauth.auth"])
    if vendor.new_record?
      redirect_to new_vendor_url(vendor)
    else
      session[:vendor_id] = vendor.id
      redirect_to root_url, notice: "Signed in!"
    end
  end
end
4

3 回答 3

0

此问题已通过更改new_vendor_url(vendor)new_vendor_url(vendor: vendor.attributes).

于 2013-09-05T02:36:07.870 回答
0

HTTP 是无状态的,因此您需要在参数、会话(通过 cookie 或其他方式)或数据库中包含信息。

鉴于您似乎正在进行注册过程,我可能倾向于在您获得信息后立即将其放入数据库中。这是一个额外的写入然后读取,但如果用户在过程中途退出,您仍然可以联系他们(理论上)以恢复注册。

于 2013-09-05T02:37:15.623 回答
0

vendor.idto 作为参数传递给new_vendor_url,然后在呈现的操作中进行查找:

# app/controllers/sessions_controller.rb
redirect_to new_vendor_url(:vendor_id => vendor.id)

# app/controllers/vendors_controller.rb
def new
  vendor_from_session = Vendor.find(params[:vendor_id])
  # code here
  @vendor = Vendor.new
end
于 2013-09-05T05:01:15.673 回答