使用 .net 中的 fb 按钮获取身份验证令牌



我正在使用Facebook应用程序,有没有办法通过使用Facebook登录按钮来获取用户身份验证令牌,我已经尝试了许多来自Google的示例,但没有成功。请为我提供包含所有必需代码的解决方案。基本上我想允许用户填写Facebook的uname和pwd并获取要保存在数据库中的身份验证令牌,我将来使用它来获取用户信息。

这是示例,但不起作用

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript" charset="utf-8"></script>

<body>
<p>
    <input type="email" id="email" placeholder="email" />
</p>
<p>
    <input type="password" id="password" placeholder="password" />
</p>
<p>
    <input type="button" onclick="" value="Authorize in Facebook using hidden iframe!"
        id="iLogin" />
</p>
<iframe id="fbFrame" src="about:blank;" border="0"></iframe>
<p style="color: green; font-size: 30px;" id="fbtoken">
</p>
<p style="color: green; font-size: 30px;" id="fbuid">
</p>
<script>
    var my_client_id = "my_client_id",
        my_redirect_uri = "http://www.facebook.com/connect/login_success.html",
        my_type = "user_agent",
        my_display = "popup"
    authorize_url = "https://graph.facebook.com/oauth/authorize?"
    authorize_url += "client_id=" + my_client_id
    authorize_url += "&redirect_uri=" + my_redirect_uri,
    authorize_url += "&type=" + my_type,
    authorize_url += "&display=" + my_display,
    authorize_url += "&scope=offline_access"
    setIFrameUrl = function () {
        $("#fbFrame").attr("src", authorize_url);
    }
    getToken = function () {
        debugger;
        var loc = document.getElementById("fbFrame").contentWindow.location.href
        if (/access_token/.test(loc)) {
            var fbToken = loc.match(/access_token=(.*)$/)[1]
            var fbId = loc.match(/-(d*)%/)[1]
            $("#fbtoken").html("Facebook access token: " + fbToken);
            $("#fbuid").html("Facebook user id: " + fbId);
        } else {
            var grantAccessButton = $("#fbFrame").contents().find("input[name=grant_clicked]");
            if (grantAccessButton) { // if app asks for permissions, grant 'em
                grantAccessButton.click();
            }
            setTimeout(getToken, 1000)
        }
    }
    doTheLogin = function () {
        var emailInput = $("#fbFrame").contents().find("input[name=email]");
        var passInput = $("#fbFrame").contents().find("input[name=pass]");
        var loginButton = $("#fbFrame").contents().find("input[name=login]");
        emailInput.val($("#email").val());
        passInput.val($("#password").val());
        loginButton.click();
    }
    $(document).ready(function () {
        setIFrameUrl();
        $("#iLogin").click(function () {
            console.log("iLogin clicked!")
            debugger;
            doTheLogin();
        })
        getToken();
    })
</script>

现在我使用以下代码

脸书登录 JS - FB.事件.订阅('auth.login') 触发器,无需单击登录按钮

但仍然无法获得 accessToken,有一个名为 Facebook_login() 的函数将获得 Tocken 但它从未调用是否有任何其他我需要做的更改,或者我是否做了错误的实现。我使用代码作为

<script>
    window.fbAsyncInit = function () {
        FB.init({
            appId: 'appId',
            status: false,
            cookie: true,
            xfbml: true
        });
    };
    (function (d) {
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) { return; }
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        ref.parentNode.insertBefore(js, ref);
    } (document));
    function Facebook_login() {
        FB.getLoginStatus(function (response) {
            if (response.status === 'connected') {
                var uid = response.authResponse.userID;
                var accessToken = response.authResponse.accessToken;
                alert(accessToken);
            }
        });
    }
</script>
<div class="fb-login-button" onlogin="Facebook_login()" autologoutlink="true" scope="publish_stream,offline_access,manage_pages,user_groups">
</div>

我尝试了很多来自谷歌的例子,但没有成功

不应该通过尝试一些您用谷歌搜索的晦涩示例来开始使用 API,而应该通过阅读官方文档来开始。您展示的代码在很多地方看起来很奇怪,甚至在某些地方完全错误——我什至不打算详细介绍。

我的建议:首先使用JavaScript SDK方法FB.login让用户登录;然后,使用FB.api请求你需要的信息。

(如果你对如何使用 JavaScript 只有很少的基本知识 - 那么请事先完成一些教程。

最新更新