通过Facebook登录(OmniAuth)和增加用户ID

时间:2014-04-12 05:47:06

标签: ruby-on-rails ruby facebook omniauth

我已经通过Oauth成功添加了facebook身份验证。我有一个用户模型(我设置了设计),我想重定向到导轨'显示'资源。我想重定向到新用户个人资料页面,所以我添加了

      sign_in_and_redirect user_path, :event => :authentication 

进入omniauth_callback_controller。

问题是:

user_path的路由是:

          user GET      /users/:id(.:format)            users#show

:每次新用户通过我的网站注册或通过Facebook登录时,此处的ID都会增加。但Facebook并不知道将新ID传递给我的数据库,所以我可以注入一个ID吗?所有这些信息来自Facebook的COMES吧?所以我添加的注释行无法做任何事情,我不认为这样可行,因为它会在facebook上寻找current_user .. :(

   user = User.create( 
                ## id: current_user.id,
            name:auth.extra.raw_info.name,
                provider:auth.provider,
                uid:auth.uid,
                email:auth.info.email,
                password:Devise.friendly_token[0,20],
                          )

帮助将不胜感激。谢谢!如果我发布任何其他内容,请告诉我。

1 个答案:

答案 0 :(得分:0)

执行sign_in_and_redirect user_path, :event => :authentication表示您已经有current_user可用,因此您需要使用它来传递ID:

sign_in_and_redirect user_path(current_user), :event => :authentication 

或者您可能需要使用resource来设计,很难说没有看到更多的控制器代码。

sign_in_and_redirect resource, :event => :authentication 

更新 - 我的例子 - 使用GPlus,LinkedIn,Facebook和Twitter - 查看sign_in_and_redirect

  def oauthorize(kind)
    @user = find_for_ouath(kind, env["omniauth.auth"], current_user)

    if @user
      kind = 'Google+' if kind == 'GPlus'
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => kind
      session["devise.#{kind.downcase}_data"] = env["omniauth.auth"]
      # this is the line you need to look at
      sign_in_and_redirect @user, :event => :authentication
    end
  end