我想像这样将link_to
带有参数的调用放入控制器中(twitter
是authorise
路由中的参数):
def method
"/authorise/twitter"
...
end
我不介意复制授权方法来实现它,但我不知道如何将twitter
参数传递给该方法。
def authorise
user = User.from_omniauth(current_user, env['omniauth.auth'])
session[:user_id] = current_user.id
end
任何帮助都会很棒。谢谢!
更新
这是我试图在控制器方法中以某种方式复制的路线:
get '/authorise/:provider/callback', to: 'sessions#authorise'
这是from_omniauth
方法:
def self.from_omniauth(user, auth)
user.provider = auth.provider
if auth.provider == "facebook"
user.uid = auth.uid
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
elsif auth.provider == "twitter"
user.access_token = auth["credentials"]["token"]
user.access_token_secret = auth["credentials"]["secret"]
end
user.save!
end
它应该传递'twitter'
给auth
参数,但我收到此错误:
undefined method `provider' for "twitter":String
app/models/user.rb:82:in `from_omniauth'
感觉就像我应该传递一个哈希或类似的东西,但我不知道应该是什么。现在感觉就像是特定于 oauth 的东西。