我目前正在使用此guide尝试将twitter集成到Devise中。
这有点挑战,因为Twitter的OAuth不提供电子邮件地址。因此,注册的流程应为:
我意识到如果用户已经在我的系统上拥有Twitter帐户,我必须能够找到该帐户。因此,我在用户模型中添加了2个额外字段: oauth_provider,oauth_uid 。
在omniauth_callbacks_controller中:
def twitter @user = User.find_for_twitter_oauth(env [“omniauth.auth”],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter"
sign_in_and_redirect @user, :event => :authentication
else
flash[:warn] = "We still need a little more info!"
redirect_to new_user_registration_url
end
端
在user.rb
中 # The trick here is that twitter does not give you an email back
# So we should make use of uid and provider
def self.find_for_twitter_oauth(oauth_hash, signed_in_resource=nil)
uid = oauth_hash['uid']
if user = User.find_by_oauth_provider_and_oauth_uid('twitter', uid)
user
else
User.create(:password => Devise.friendly_token[0,20],
:oauth_provider => "twitter",
:oauth_uid => oauth_hash['uid'])
end
end
但是,我已经彻底调试了这一点,并意识到如果我将用户重定向到new_registration_url,将删除在user.rb中创建的用户。
如何执行以下操作:
我已经尝试过使用会话,但它变得非常混乱,因为我必须使用patch patch devise的新版本并为registrationscontroller.rb创建。
请有人为我提供一种方法。
我还没有成功。让我告诉你我写的是什么。
答案 0 :(得分:0)
我按照这两个截屏视频,这正是你想要的。
你可以尝试一下!他正在使用omniauth gem,这非常简单和令人敬畏: - )