使用Oauth使用Javascript访问Api

时间:2015-04-03 19:59:08

标签: javascript cakephp backbone.js oauth oauth-2.0

一旦我使用简单的javascript客户端创建了一个访问令牌,就有问题从我的api访问数据。

这是我的Js应用程序对象,你可以看到我从我的api返回一个新的access_token - 这在这一点上工作得很好。我将access_token存储到app.AccessToken中供我在整个应用程序中进行的任何其他api调用中使用。但由于某些原因,当我请求任何内容时,响应始终是登录页面,所以基本上我在尝试访问任何内容时都会被重定向,即使我通过了一个正在运行的最新access_token。

var app = (function(){

/**
 * Api
 * @type Object
 */
var api = {
    AccessToken : null,
    views: {},
    models: {},
    collections: {},
    content: null,
    router: null,
    documents: null,
    init: function() {
        this.content = $("#content");
        this.documents = new api.collections.Documents();
        Backbone.history.start();
        return this;
    },
    changeContent: function(el) {
        this.content.empty().append(el);
        return this;
    },
    title: function(str) {
        // set page title 
    }
};

/**
 * ViewFactory
 * @type Object
 */
var ViewFactory = {
    documents: function() {
        this.documentsView = new api.views.documents({
            model: api.documents
        });
        return this.documentsView;
    }
};

/**
 * AppRouter
 * @type Object
 */
var Router = Backbone.Router.extend({
    routes: {
        '' : 'documents'
    },
    documents: function() {
        var view = ViewFactory.documents();
        api.changeContent(view.$el);
        view.render();
    }
});

/**
 * OAuth
 * @type Object
 * @return string  
 */
var OAuth = {

    title    : 'Js Client',
    clientId : 'NTUxNTY4YWE1NWUxMzI4',
    username : 'john@globallcoach.com',
    password : 'password',

    init: function() {
        var provision = OAuth.provision();
        if(provision.hasOwnProperty('success')) {
            var authenticate = OAuth.authenticate();
            if(authenticate.hasOwnProperty('access_token')) {
                api.AccessToken = authenticate['access_token'];
            }
        }
    },

    provision: function() {
        var response;
        $.ajax({
            async: false,
            url  : 'http://customer-server-2.dev/oauth/provision/.json', 
            type : 'get',
            data : {
                title : OAuth.title,
                client_id : OAuth.clientId
            },
            success:function(data) {
                response = jQuery.parseJSON(data);
            }, 
        });
        return response;
    },

    authenticate: function() {
        var response;
        $.ajax({
            async: false,
            url  : 'http://customer-server-2.dev/oauth/token.json', 
            type : 'get',
            data : {
                'grant_type' : 'password',
                'username'   : OAuth.username,
                'password'   : OAuth.password,
                'client_id'  : OAuth.clientId,
            },
            success:function(data) {
                response = data;
            }
        });
        return response;
    },
}

/**
 * Exercute & return
 */
api.router = new Router();
OAuth.init();
return api;

})();

1 个答案:

答案 0 :(得分:0)

解决!我需要确保在Rest AppController上我需要为api范围内的操作定义$this->Auth->allow()