情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Oauth認証(Dropbox)その2

前回のWebページをローカルのストレージを使用するように改良しました。1回目の接続時に入手した資格情報を保存しておいて2回目以降はその情報を使用して接続します(保存はuuStorage.js任せです)。

ライブラリとしてjQuery、Query String Object、oauth.js、sha1.js、uuStorage.jsを使用しています。

<!DOCTYPE html>
<html>
<head>
    <title>Dropbox</title>
    <script type="text/javascript" src="jquery-1.6.2.js"></script>
    <script type="text/javascript" src="jquery.query-2.1.7.js"></script>
    <script type="text/javascript" src="oauth.js"></script>
    <script type="text/javascript" src="sha1.js"></script>
    <script type="text/javascript" src="uuStorage-0.11.js/uuStorage.js/uuStorage.js"></script>
    <script type="text/javascript">
        var accessor = { consumerKey: "xxxxxxxxxxxxxxx", consumerSecret: "xxxxxxxxxxxxxxx", serviceProvider: { signatureMethod: "HMAC-SHA1", requestTokenURL: "https://api.dropbox.com/0/oauth/request_token", userAuthorizationURL: "https://www.dropbox.com/0/oauth/authorize", accessTokenURL: "https://api.dropbox.com/0/oauth/access_token"} };

        function getTokens() {
            var message = { method: "get", action: accessor.serviceProvider.requestTokenURL };
            OAuth.completeRequest(message, accessor);
            var url = OAuth.addToURL(message.action, message.parameters) + "&callback=?";

            $.ajax({
                url: url,
                dataType: "jsonp",
                type: "GET",
                success: function (data, status) {
                    var results = OAuth.decodeForm(data);

                    accessor.oauth_token = OAuth.getParameter(results, "oauth_token");
                    accessor.oauth_token_secret = OAuth.getParameter(results, "oauth_token_secret");

                    document.location = accessor.serviceProvider.userAuthorizationURL + "?oauth_token=" + accessor.oauth_token + "&oauth_token_secret=" + accessor.oauth_token_secret + "&oauth_callback=" + document.URL;
                },
                error: function (XHR, textStatus, errorThrown) {
                }
            });
        };

        function getTokens2(callback) {
            message = { method: "get", action: accessor.serviceProvider.accessTokenURL };
            OAuth.completeRequest(message, { consumerKey: accessor.consumerKey, consumerSecret: accessor.consumerSecret, token: accessor.oauth_token, tokenSecret: accessor.oauth_token_secret });
            url = OAuth.addToURL(message.action, message.parameters) + "&callback=?";

            $.ajax({
                url: url,
                dataType: "jsonp",
                type: "GET",
                success: function (data, status) {
                    var results = OAuth.decodeForm(data);

                    accessor.oauth_token = OAuth.getParameter(results, "oauth_token");
                    accessor.oauth_token_secret = OAuth.getParameter(results, "oauth_token_secret");

                    if (callback)
                        callback();
                },
                error: function (XHR, textStatus, errorThrown) {
                }
            });
        };

        window.xstorage = function (uu, storage) {
            accessor.oauth_token = storage.get("oauth_token");
            accessor.oauth_token_secret = storage.get("oauth_token_secret");
            if (accessor.oauth_token == "" && accessor.oauth_token_secret == "") {
                accessor.oauth_token = $.query.get("oauth_token");
                accessor.oauth_token_secret = $.query.get("oauth_token");

                if (accessor.oauth_token == "" && accessor.oauth_token_secret == "") {
                    getTokens();
                }
                else {
                    getTokens2(function () {
                        storage.set("oauth_token", accessor.oauth_token);
                        storage.set("oauth_token_secret", accessor.oauth_token_secret);

                        $(document.body).append("<div>oauth_token: " + accessor.oauth_token + "<br/>oauth_token_secret: " + accessor.consumerSecret + "</div>");
                    });
                }
            }
            else {
                $(document.body).append("<div>oauth_token: " + accessor.oauth_token + "<br/>oauth_token_secret: " + accessor.consumerSecret + "</div>");
            }
        }
    </script>
</head>
<body>
</body>
</html>
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-web