Identity Toolkit不起作用 - 错误代码:来自IDP的错误响应

时间:2015-07-30 03:31:55

标签: javascript html google-identity-toolkit

我目前无法解决的问题是bad response from IDP,原因应该是缺少mode=select,但我现在还没有意识到{{1}的页面必须实施

事实上,我已将代码添加到两个独立的页面中,第一个是index.php,它执行以下操作:



mode=select




代码的第二部分在另一个index.php中并执行以下操作:



<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script>
<script type="text/javascript">
var config = {
apiKey: 'AIzaSyAaMAfu7S2AITODrGJzVkIYBXlZR3FYhuQ',
signInSuccessUrl: 'http://www.lascuolacheverra.org/signin?mode=select', // i tried to add the `mode=select here`
signInOptions: ["google", "password"],
idps: ["Google", "AOL", "Microsoft", "Yahoo", "Facebook"],
oobActionUrl: '/',
siteName: 'La scuola che verrà A.P.S.',
    
    // Optional - function called after sign in completes and before
    // redirecting to signInSuccessUrl. Return false to disable
    // redirect.
    // callbacks: {
    //  signInSuccess: function(tokenString, accountInfo,
    //    opt_signInSuccessUrl) {
    //      return true;
    //    }
    // },
    
    // Optional - key for query parameter that overrides
    // signInSuccessUrl value (default: 'signInSuccessUrl')
    // queryParameterForSignInSuccessUrl: 'url'
    
    // Optional - URL of site ToS (linked and req. consent for signup)
     tosUrl: 'http://www.lascuolacheverra.org/privacypolicy.html',
    
    // Optional - URL of callback page (default: current url)
    // callbackUrl: 'http://example.com/callback',
    
    // Optional - Cookie name (default: gtoken)
    //            NOTE: Also needs to be added to config of the ‘page with
    //                  sign in button’. See above
    // cookieName: ‘example_cookie’,
    
    // Optional - UI configuration for accountchooser.com
    acUiConfig: {
     title: 'Sign in to lascuolacheverra.org',
     favicon: 'http://www.lascuolacheverra.org/favicon.ico',
     branding: 'http://www.lascuolacheverra.org/images/lascuolacheverra.jpg'
     },
    
    
    // Optional - Function to send ajax POST requests to your Recover URL
    //            Intended for CSRF protection, see Advanced Topics
    //      url - URL to send the POST request to
    //     data - Raw data to include as the body of the request
    //completed - Function to call with the object that you parse from
    //            the JSON response text. {} if no response
    /*ajaxSender: function(url, data, completed) {
     },
     */
};
// The HTTP POST body should be escaped by the server to prevent XSS
window.google.identitytoolkit.start(
                                    '#gitkitWidgetDiv', // accepts any CSS selector
                                    config,
                                    '{{ POST_BODY }}');
</script>

<!-- End modification -->
&#13;
&#13;
&#13;

我想知道我必须如何才能正确使用<!DOCTYPE html> <html> <head> <!-- Copy and paste here the "Sign-in button javascript" you downloaded from Developer Console as gitkit-signin-button.html --> <script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script> <link type=text/css rel=stylesheet href="//www.gstatic.com/authtoolkit/css/gitkit.css" /> <script type=text/javascript> window.google.identitytoolkit.signInButton( '#navbar', // accepts any CSS selector { widgetUrl: "/widget", signOutUrl: "/", } ); </script> <!-- End configuration --> </head> <body> <!-- Include the sign in button widget with the matching 'navbar' id --> <div id="navbar"></div> <!-- End identity toolkit widget --> <p> {{ CONTENT }} </p> </body> </html>,因为从今天开始,Identity Toolkit可以在我的主页上使用,但由于这个bug我无法充分利用它

3 个答案:

答案 0 :(得分:1)

您需要创建两个页面。让我们说url1和url2。

url1,您可以通过以下方式在其中添加登录按钮:

window.google.identitytoolkit.signInButton()

将widgetUrl设置为url2

在url2中,您可以通过运行以下来呈现窗口小部件:

window.google.identitytoolkit.start()

将signInSuccessUrl设置为url1

不要添加?mode = select to widget url。在登录按钮单击时,它会自动将其附加到该URL并重定向到那里。

答案 1 :(得分:0)

  

signInSuccessUrl:   'http://www.lascuolacheverra.org/signin?mode=select',//我试过   添加activate_this = '/home/harunbiswas/.virtualenvs/django18/bin/activate_this.py' with open(activate_this) as f: code = compile(f.read(), activate_this, 'exec') exec(code, dict(__file__=activate_this))

这不应该指向mode=select here页面。也许将其指向/signin/

另外,删除

  

// signInOptions:[“google”,“password”],//&lt; - 这显然掩盖了idps

     

idps:[“Google”,“AOL”,“Microsoft”,“Yahoo”,“Facebook”],

我对此进行了一些测试,如果我添加了signInOptions,则会忽略idps并且您最终只能使用Google和密码登录。

显然只使用signInOptions is the way to do it。我在其他示例中读过idps而不是signInOptions,并且我成功使用了idps。

更新我误读了一下代码。我认为/signed-in是显示小部件的页面,教程放在\signin下面。我的错误是因为在我的项目中我将\widget替换为\widget。因此,如果您的\secure-sign-in页面不是\signin页面,那么您的代码已经就行了。在任何情况下,您都应删除\widget,因为它仅用于?mode=select,并由\widget函数自动添加。

答案 2 :(得分:0)

好吧,我刚遇到同样的错误&#34;错误代码:来自IDP的错误回复。&#34;

如上述评论中所述,有两种可能性:

  1. 仅创建一个带有SignIn-Button的页面,另一个带有上一个重定向按钮的页面
  2. "?mode=select"作为查询参数附加到网址
  3. 重定向路线,例如

    app.get("/login", function(req, res) {
      res.redirect("/login?mode=select");        
    }
    
  4. 如果你决定第二个选项,就像我最初做的那样,不要试图将它添加到请求对象的查询参数*,而是将其附加到浏览器然后显示的URL,因为{{3需要来自浏览器window.location.href的{​​{3}}。

    *我在使用req.params.mode = "select";的基于快速的node.js应用中尝试过此操作,如果有更好的方法将其添加为等同于?mode=select,请随时纠正我