Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过Facebook(OmniAuth)登录,并增加用户ID_Ruby On Rails_Ruby_Facebook_Omniauth - Fatal编程技术网

Ruby on rails 通过Facebook(OmniAuth)登录,并增加用户ID

Ruby on rails 通过Facebook(OmniAuth)登录,并增加用户ID,ruby-on-rails,ruby,facebook,omniauth,Ruby On Rails,Ruby,Facebook,Omniauth,我已经通过Oauth成功添加了facebook身份验证。我有一个用户模型(我用Desive设置),我想重定向到rails的“show”资源。我想重定向到新用户配置文件页面,所以我添加了 sign_in_and_redirect user_path, :event => :authentication 进入omniauth\u回调\u控制器 这方面的问题是: 用户路径的路由为: user GET /users/:id(.:format)

我已经通过Oauth成功添加了facebook身份验证。我有一个用户模型(我用Desive设置),我想重定向到rails的“show”资源。我想重定向到新用户配置文件页面,所以我添加了

      sign_in_and_redirect user_path, :event => :authentication 
进入omniauth\u回调\u控制器

这方面的问题是:

用户路径的路由为:

          user GET      /users/:id(.:format)            users#show
每当新用户通过我的网站注册或通过facebook登录时,此处的:id应该增加。但Facebook不知道如何将新ID传递给我的DB,所以我可以注入一个ID吗?下面所有这些信息都来自facebook,对吗?因此,我添加的评论行不能做任何事情,我认为这不会起作用,因为这将是facebook在寻找当前的用户..:(


非常感谢您的帮助。谢谢!如果我还需要发布其他内容,请告诉我。

当您登录并重定向用户路径时,:event=>:authentication意味着您应该已经有一个
当前用户
,因此您需要使用它来传递id:

sign_in_and_redirect user_path(current_user), :event => :authentication 
或者您可能需要使用Desive提供的
资源
,很难说没有看到更多的控制器代码

sign_in_and_redirect resource, :event => :authentication 
更新-我的示例-使用GPlus、LinkedIn、Facebook和Twitter-查看带有
登录和重定向的行

  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

嘿,谢谢你的回复!我尝试了用户路径(当前用户),但这不起作用->当前用户为零。我没有真正的控制器,因为我正在使用Desive。我是否必须覆盖Desive控制器?您可能需要这样做,不确定如何使用fb进行授权,重定向应该与我在回答中的完全相同。我将用我的示例更新答案。或者用方法,您正在使用
登录并重定向用户路径,:event=>:authentication
,也可以看到此答案。感谢您澄清这一点,当我发布问题时为时已晚。我也很邋遢,有一些拼写错误,但您的贡献帮助我更好地看到了情况。谢谢!@Abednego增加用户id有什么意义db中的用户?我们在说什么?id属性是由db创建的,无论如何都不应该更改,这是一个用于查找记录的唯一id,如果您更改它,您将弄乱所有记录。他需要的是发送用户id,以便他可以在链接中使用该id重定向到用户页面,而无需为此在db中增加id.我不是想更改唯一的ID,我只是想确保它被添加。我很困惑,所有的参数都来自facebook。
  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