1

omn​​iauth(Twitterを使用)を介したユーザーログインを要求するのに問題があります。session_controller、ユーザーモデル、承認モデルを設定しています。

問題は、omniauthハッシュにアクセスできないことのようです。理由はありますか?

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :check_sign_in

  def check_sign_in
    omniauth = request.env["omniauth.auth"] 
    authentication = Authorization.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
    unless authentication
        redirect_to signin_path
    end
  end
end

ありがとう!

4

1 に答える 1

1

あなたは近くにいます、多分このRailsCastを見ることはあなたをそこに連れて行くでしょう。私はそれに従い、あなたのようにツイッタールートに行きました。それは私のために働いているので、あなたも成功するはずです。

私のアプリケーションコントローラーには、

private
def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

そして、私のセッションモデルでは、

class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url, :notice => "You are logged  in."
  end
  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => 'You are logged out.'
  end
end

そして私のユーザーのモデルでは

def self.from_omniauth(auth)
  where(auth.slice("provider", "uid")).first || create_from_omniauth(auth)
end

def self.create_from_omniauth(auth)
  create! do |user|
    user.provider = auth["provider"]
    user.uid = auth["uid"]
    user.name = auth["info"]["name"]
    user.nickname = auth["info"]["nickname"]
    user.image = auth["info"]["image"]
  end
end
于 2013-01-01T19:35:09.937 に答える