2015-07-27 5 views
0

Я пытаюсь создать собственный поставщик OAuth для Ember Simple Auth Torri wrapper для Yahoo OAuth 2.0. Я использовал встроенные провайдеры для Facebook и Google без каких-либо проблем, но поскольку пакет Yahoo OAuth не предоставляется по умолчанию, я стараюсь следовать руководству и создавать свои собственные.Ember Simple Auth Torri custom Provider

//app/torri-provider/yahoo-oauth2.js 

export default Ember.Object.extend({ 
    host: 'https://api.login.yahoo.com/oauth2/', 
    // create a new authorization 
    open: function(options) { 
    return new Ember.RSVP.Promise(function(resolve, reject){ 
     console.log("Hi"); 
     var authurl="https://api.login.yahoo.com/oauth2/request_auth"; 

     return $.ajax(authurl, "GET", { 
     // CORS 
     crossDomain: true, 
     xhrFields: {withCredentials: true} 
     }).then(function(json) { 
     // Massage this demo API endpoint to look like RESTAdapter expects. 
     return { things: [json] }; 
     }); 


    }); 
    } 
}); 

В мой контроллер, я называю это как -

'yahoo-share':function(){ 
    var self=this; 
    this.get('session').authenticate('simple-auth-authenticator:torii',"yahoo-oauth2"); 
}, 

Однако я не в состоянии получить часть вопроса CORS и получаю следующее сообщение об ошибке на моем Console-

userhomeinvitemembers : 1 XMLHttpRequest не может загрузить https://api.login.yahoo.com/oauth2/request_auth. Нет Заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе . Origin 'http://localhost:4200' поэтому не допускается доступ.

Я попытался добавить оконечную точку oauth2 в белый список ember cli и белый список безопасности контента, но все равно получаю ту же ошибку.

ENV.contentSecurityPolicy = { 
    'default-src': "'none'", 
    'script-src': "'self' http://localhost:4200/", 
    'font-src': "'self' http://localhost:4200/", 
    'connect-src': "'self' http://localhost:4200/ http://localhost:3000/ http://192.168.1.173:3000/ https://api.login.yahoo.com/oauth2/request_auth", 
    'img-src': "'self'", 
    'style-src': "'self'", 
    'media-src': "'self'" 
    }, 


    ENV['simple-auth'] = { 
     crossOriginWhitelist: ['https://api.login.yahoo.com/oauth2/request_auth'], 
     authorizer: 'simple-auth-authorizer:oauth2-bearer', 
     authenticationRoute: 'index', 
     routeIfAlreadyAuthenticated:'userwelcome', 

    }, 

    ENV['torii'] = { 
     providers: { 
     'facebook-oauth2': { 
      apiKey: '799728020115355' 
     }, 
     'google-oauth2': { 
      apiKey:'299472944809-sddblocmketamp64sapk51qdrromkj0g.apps.googleusercontent.com', 
      scope: 'https://www.google.com/m8/feeds/', 
      redirectUri:'http://localhost:4200/userhomeinvitemembers' 
     }, 
     'yahoo-oauth2': { 
      apiKey:'dj0yJmk9UmpXWG1odlVlenRSJmQ9WVdrOVdFUkxRbVo2TkdVbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD04Zg--', 

     } 
     } 
    }; 

ответ

0

Я не думаю, что вы можете назвать это с помощью AJAX, но нужно, чтобы открыть всплывающее окно, вместо того, чтобы позволить пользователю ввести свои учетные данные Yahoo и авторизовать приложение. Как только это будет сделано, Yahoo перенаправит маршрут, который вы определяете, и включите в строку запроса код проверки подлинности, который затем читает и отправляет обратно в родительское окно (см. Источник для поставщика OAuth 2.0 по умолчанию open: https://github.com/Vestorly/torii/blob/master/lib/torii/providers/oauth2-code.js#L118) ,

Смежные вопросы