Ember-Simple-Auth-Torii: Как я могу обработать авторизацию на стороне сервера с помощью devise-omniauth

Привет, у меня есть приложение ember с внешним интерфейсом с бэкэндом ember-cli-simple-auth-torii и ember-cli-simple-auth- devise с devise и omniauth-facebook

Torii дает вам код авторизации при входе через 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

Мой SessionsController

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. Я звоню на сервер Facebook с моего клиентского порта: 4200, а мой вызов ajax использует URL http: // localhost:3000/users/auth/facebook/callback порт 3000

  2. Когда в моем ajax-вызове со стороны клиента я использую / users / auth / facebook / callback, я получаю сообщение об ошибке: Неверное перенаправление, то есть тип: 'POST', url: '/users/auth/facebook/callback', dataType: 'json',

    Запущен POST "/users/auth/facebook/callback" для 127.0.0.1 в 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\u0947 \ u0990 \u0928\u0941 \ u092a \ u094d \ u0930 \ u092f \ u092f \ u092f \ u094b \ u0915\u0949 \ u094d \ u093b \ u0917 \ u0930 \ u0936 \ u0936 \ u0926 \ u094d \ u0993e \ u0930 \ u0930 \ u0905\u0928\u0928\u0941 \ u0940 u093e \ u0939 \ u0940 "" тип ":"OAuthException","код":191}} Обработка AuthenticationsController# провал как JSON Параметры: { "код"=>"AQD38nHY4xvZnGdaFNJrjcIiBaSMPa3ZLsr3jpV8aPRoFHPGOTITGMtPZ9sA7pts41JnObhCsK3fLTI64Z-7YJi2PQGL7_O1i5m8GF57dGBYegxnSOZJAYxhiuxnIwxp4uhw4OBz61hthtOsF1BNw0bK3LNQJbJPXK0LO0HxasZ0d06swFcp4t8mminRhv6Qsx7ZQVCrOs7oonYfyNxGQiVUB7UM6u7JcPVYaySfJQR1QkMKnLvQ058kbKEUaIvvUyrLE73Gjs_i4mgb4SBAZMbR3c1qVlPgZ-75cIsyqmttmqhO-y4NgEAOPh"} Перенаправить к http: // 127.0.0.1:3000/users/sign_in Завершено 302 Найдено за 74 мс (ActiveRecord: 0,0 мс)

Я не знаю, правильный ли мой подход. Я хочу иметь devise + torii аутентификацию как

1 ответ

// Это сработало для меня, ожидая более элегантного пути.

   authenticateWithFacebook: function(provider) 
    {
           var self = this;
           this.get('session').authenticate('simple-auth-authenticator:torii', "facebook-connect" ).then(function() 
    {

              var access_token= self.get('session.accessToken');

              Ember.$.ajax({
                type: 'POST',
                url: 'http://localhost:3000/users/auth/facebook_access_token/callback',

                dataType: 'json',
                data: {
                  access_token : access_token,

                },
                success: function(data, textStatus, jqXHR) {
                  // Handle success case
                },
                error: function(jqXHR, textStatus, errorThrown) {
                  // Handle error case
                }
              });

              self.transitionTo('dashboard');
             });
        },
Другие вопросы по тегам