0

YouTube経由でログインするために、omniauth youtubeとgoogle oauth2 gemを使用しています。ユーザーがログインしようとしているアカウントで既に YouTube チャンネルを作成していれば、これはすべて機能します。

ユーザーが YouTube チャンネルなしでログインしようとすると、次のメッセージでエラーが発生します。

OAuth2::Error

    <HTML>
    <HEAD>
    <TITLE>NoLinkedYouTubeAccount</TITLE>
    </HEAD>
    <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
    <H1>NoLinkedYouTubeAccount</H1>
    <H2>Error 401</H2>
    </BODY>
    </HTML>

このエラーを処理して、ユーザーが YouTube アカウントに送信され、そこで YouTube チャンネルを作成してから、有効なログイン資格情報を使用してサイトにリダイレクトされるか、方法を説明するページに戻されるようにするにはどうすればよいですか? YouTube チャンネルを作成して、もう一度お試しください。

私のコードは次のとおりです。

user.rb

def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.email = auth.info.email
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
      user.picture = auth.info.image
      user.save!
      end
    end

session_controller:

def create
      user = User.from_omniauth(env["omniauth.auth"])
      session[:user_id] = user.id
      redirect_to root_path, notice: "Signed in"
    end

ルート

match 'auth/youtube/callback', to: 'sessions#create'
  match 'auth/failure', to: redirect('/')
  match 'signout', to: 'sessions#destroy', as: 'signout'

omn​​iauth.rb

OmniAuth.config.on_failure = SessionsController.action(:oauth_failure)

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :youtube, YOUTUBE_KEY, YOUTUBE_SECRET, { access_type: 'online', approval_prompt: ''}
end
4

1 に答える 1

1

次のようなもので使用できますrescue_from

rescue_from OAuth2::Error do |exception|
  redirect_to *your page you want to show with instructions*, :notice => "You must link a Youtube Channel"
end

YouTube チャンネルの追加は oauth サイクルの一部ではないため、通常の oauth 認証のように、YouTube にリダイレクトしてチャンネルを作成し、サイトに戻ることはできないと思います。便宜上youtubeに。

http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html

于 2013-01-08T07:17:00.820 に答える