link_to
次のように、引数を指定して呼び出しをコントローラーに入れたい(twitter
はauthorise
ルート内の引数です):
def method
"/authorise/twitter"
...
end
twitter
これを実現するために authorize メソッドをコピーしてもかまいませんが、そのメソッドに引数を渡す方法がわかりません。
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 固有のもののように感じられます。