首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过ajax调用实现HybridAuth?

如何通过ajax调用实现HybridAuth?
EN

Stack Overflow用户
提问于 2015-05-13 10:05:25
回答 1查看 661关注 0票数 1

我正在尝试设置一个modx网站的单点登录,并决定尝试使用HybridAuth和Ajax,虽然我得到了一个错误,我不知道如何处理,这是我有:

调用jQuery的一系列按钮:

代码语言:javascript
复制
<button 
    name="googlelogin" 
    type="button" 
    id="googlelogin" 
    class="btn btn-primary googlelogin hybridauthlogin" 
    data-provider="Google" 
    data-redirect="" 
    data-action="/hybridauth.php">Login with Google+
</button>


<button 
    name="facebooklogin" 
    type="button" 
    id="facebooklogin" 
    class="btn btn-primary facebooklogin hybridauthlogin" 
    data-provider="Facebook" 
    data-redirect="" 
    data-action="/hybridauth.php">Login with Facebook
</button>

jQuery:

代码语言:javascript
复制
$(document).ready(function() {

    $('.hybridauthlogin').on('click', function() {

        var action = $(this).attr('data-action');
        var redirect = $(this).attr('data-redirect');
        var provider = $(this).attr('data-provider');

        var postdata = {"action": action, "redirect": redirect, "provider": provider };

        $.ajax({
            type: "POST",
            url: action,
            dataType  : "JSON",
            cache : false,
            data: postdata,

            success: function(data){
                console.log("success status posting data" + data);
                if(data.status == 'success'){

                    console.log("success status posting data");

                }else if(data.status == 'error'){

                    console.log("error status posting data");

                }

            },

            error: function(jqxhr,textStatus,errorThrown){

                console.log("FATAL: error posting data");

                console.log(textStatus);
                console.log(errorThrown);

            }

        });

    });

});

和一个非常简单的加载modx &HyBridAuth的php处理器:

代码语言:javascript
复制
<?php
// start a new session (required for Hybridauth)
session_start();

define('MODX_API_MODE', true);

require_once('index.php');

$modx = new modX();

$modx->initialize('web');


// change the following paths if necessary
$config   = dirname(__FILE__) . '/assets/components/hybridauth/config.php';

require_once( dirname(__FILE__) . '/assets/components/hybridauth/Hybrid/Auth.php' );

$hybridauth = new Hybrid_Auth( $config );

$google = $hybridauth->authenticate( "Google" );

$output = array(
    'status' => 'success',
    'message' => 'This is the success message',
);

$output = $modx->toJSON($output);

header('Content-type: application/json');

print $output;

所以它实际上还没有创建modx会话,如果在不使用ajax的情况下调用它,它将进行身份验证,但只要我添加ajax部分,我就会得到一个控制台错误:

代码语言:javascript
复制
XMLHttpRequest cannot load https://accounts.google.com/o/oauth2/auth?client_id=xxx-xxx…ails.read+https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F&access_type=offline. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.domain.com' is therefore not allowed access.

哪个看起来很简单,是ajax吗?在处理器的倒数第二行之外的某个位置添加了一个标题,该标题添加在错误之后。添加报头可能是什么?我该如何修复?

EN

回答 1

Stack Overflow用户

发布于 2015-10-21 00:58:14

由于身份验证需要将用户重定向到提供者,因此它不适用于AJAX调用。后端脚本将在Redirect函数中终止()。您看到的标头可能是重定向标头。

对于另一种解决方案,请检查此方法:https://stackoverflow.com/a/29891358/1816603

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30204420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档