3

こんにちは、ember-cli-simple-auth-torii を備えたフロントエンドと、devise と omniauth-facebook を備えた ember-cli-simple-auth-devise バックエンドを備えた ember アプリを持っます

Facebookでログインすると鳥居から認証コードが渡されますが、この認証コードをどうするかは私たち次第です。

サーバー側に対してユーザーを認証することをお勧めします。この認証コードをオムニ認証で使いたいです。

私の AuthenticationController は次のようになります

class AuthenticationsController < Devise::OmniauthCallbacksController
 def facebook
   omniauth = request.env["omniauth.auth"]
   authentication = Authentication.find_by_provider_and_uid(omniauth['provider'],  omniauth['uid'])
    ...
    sign_in(:user,user)
 end
end

私のセッションコントローラー

class SessionsController < Devise::SessionsController
  def create
    respond_to do |format|
      format.html { super }
      format.json do
        binding.pry
        self.resource = warden.authenticate!(auth_options)
        sign_in(resource_name, resource)
        data = {
          user_token: self.resource.authentication_token,
          user_email: self.resource.email
        }
        render json: data, status: 201
      end
    end
  end
end

私のアプローチが正しいかどうかはわかりませんがusers/auth/facebook/callback 、クライアントから を呼び出すと、サーバー側で認証プロセスがトリガーされ、アプリでの crud 操作に対して後でユーザーを承認できると思います。

authenticateWithFacebook: function(provider) {
       var self = this
        this.get('session').authenticate('simple-auth-authenticator:torii', "facebook-oauth2" ).then(function() {
          var authorizationCode= self.get('session.authorizationCode');
          console.log(authorizationCode);
          Ember.$.ajax({
            type: 'POST',
            url: 'http://localhost:3000/users/auth/facebook/callback',
            dataType: 'json',
            data: {
              code: authorizationCode,
            },
            success: function(data, textStatus, jqXHR) {
              // Handle success case
            },
            error: function(jqXHR, textStatus, errorThrown) {
              // Handle error case
            }
          });

        });
    },

私のサーバー ログには、omniauth facebook ログイン コールバック フェーズを開始できると書かれていますが、エラーが発生します。Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request

Started POST "/users/auth/facebook/callback" for 127.0.0.1 at 2014-11-16 11:03:44 +0530
I, [2014-11-16T11:03:44.926842 #5160]  INFO -- omniauth: (facebook) Callback phase initiated.
E, [2014-11-16T11:03:46.185161 #5160] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, : 
{"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}
Processing by AuthenticationsController#failure as HTML
  Parameters: {"code"=>"AQBaag8FhEzyd8qCMh14HbAl-iBXrpK1YSrP9vz72kzRE86S-cf0Vsf1sSfpR1-Fajr1QfUbAoyYqj3ivcXayGk5KcmT27b4avy1NAcLzM2FcW1neGS9RA6CoVhYXpj2rbjYY7Dm-1Qw6Me0RjiidwJxwF4SVUVX4S6Y5UatRMW6FW2IyKxJJy8e0-VYlmFBpv3VKjq3tYE_pdM6lKLTEBAyApvIm2UfTZXLqeWWIIIf3romLB-q48BXvv2koM5fSkrvB2HyPOJq9Y_RLeWtw4nARn8aluJC-KhyYfUcprf_KzM30ZBYNxu5S6IYkgcdq_kwEsHinoddDqe-"}
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 62ms (ActiveRecord: 0.0ms)
  1. 確認コードの検証中にエラーが発生しました。redirect_uri が OAuth ダイアログ リクエストで使用したものと同じであることを確認してください。 クライアント側のポート 4200 から Facebook サーバーを呼び出しており、ajax 呼び出しでは URL http:// localhost :3000/users/auth/facebook/callbackを使用しています。ポート 3000

  2. クライアント側からの ajax 呼び出しで /users/auth/facebook/callback を使用すると、エラーが発生します: Invalid redirect ie type: 'POST', url: '/users/auth/facebook/callback', dataType: 'json',

    2014-11-16 11:27:40 +0530 I、[2014-11-16T11:27:40.150441 #5160] INFO -- omniauth: ( facebook) コールバック フェーズが開始されました。E, [2014-11-16T11:27:41.336997 #5160] エラー -- omniauth: (facebook) 認証失敗!invalid_credentials: OAuth2::Error, : {"error":{"message":"無効な redirect_uri: \u0926\u093f\u0932\u0947\u0932\u0940 URL \u0905\u0928\u0941\u092a\u094d\u0930\u092f\ u094b\u0917 \u0915\u0949\u0928\u094d\u092b\u093f\u0917\u0930\u0947\u0936\u0928\u0926\u094d\u0935\u093e\u0930\u0947 \u0905\u0928\u0941\u092e\u0924 \u0928\ u093e\u0939\u0940.","type":"OAuthException","code":191}} AuthenticationsController#failure as JSON パラメータによる処理: {"code"=>"

私のアプローチが正しいかどうかはわかりません。工夫+鳥居認証両方したい

4

1 に答える 1