我已经通过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],
)
帮助将不胜感激。谢谢!如果我发布任何其他内容,请告诉我。
答案 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