Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax Facebook登录+;Drupal8自定义模块。在db_select中不允许/检测到POST变量_Ajax_Facebook_Drupal_Facebook Login_Drupal 8 - Fatal编程技术网

Ajax Facebook登录+;Drupal8自定义模块。在db_select中不允许/检测到POST变量

Ajax Facebook登录+;Drupal8自定义模块。在db_select中不允许/检测到POST变量,ajax,facebook,drupal,facebook-login,drupal-8,Ajax,Facebook,Drupal,Facebook Login,Drupal 8,我在Drupal8中创建了一个自定义模块,允许用户使用facebook登录进行身份验证。他们的访问令牌会根据数据库中存储的令牌进行检查,如果匹配,则会验证用户,如果不匹配,则会将他们重定向到允许他们将Facebook帐户链接到Drupal用户的页面 登录按钮为: <button id="login_fb" onclick="logIt()">Log in with Facebook</button> 处理此ajax调用的控制器代码是: public function t

我在Drupal8中创建了一个自定义模块,允许用户使用facebook登录进行身份验证。他们的访问令牌会根据数据库中存储的令牌进行检查,如果匹配,则会验证用户,如果不匹配,则会将他们重定向到允许他们将Facebook帐户链接到Drupal用户的页面

登录按钮为:

<button id="login_fb" onclick="logIt()">Log in with Facebook</button>
处理此ajax调用的控制器代码是:

public function token() {


    $fb_token = $_POST['access_token'];

    $query = db_select('user__field_fb_token', 'u');
    $query
      ->fields('u')
      ->condition('u.field_fb_token_value', $fb_token,'=');

    $res = $query->execute();
    $res->allowRowCount = TRUE;
    $count = $res->rowCount();


//See if anybody has this access token
if($count > 0)
{
    $user = $res->fetchAssoc();
    //TODO: Refresh access token and update

    $login_id = $user['entity_id'];
    //Redirect the user to topics
    user_login_finalize(user_load($login_id));

    $response_arr = array("status" => "authorised","redirect_url" => "/topics");

}
else
{

    $_SESSION['access_token'] = $fb_token;
    $response_arr = array("status" => "unauthorised","redirect_url" => "/user/auth","token" => $fb_token);

}



$response = new Response();
$response->setContent(json_encode($response_arr));
$response->headers->set('Content-Type', 'application/json');
return $response;

}
奇怪的是,db_select查询总是返回0,因此不验证拥有此令牌的用户帐户。然而取代

 $fb_token = $_POST['access_token'];

产生正确的结果。我已经检查了post变量是否传入并且它是否存在(这就是为什么我用未经授权的响应返回它,以检查它是否为空)

我认为这可能与FB.Login方法的异步性质有关,但不确定


在此问题上的任何帮助都将不胜感激

访问令牌有一个到期时间,它们不是永远有效的。因此,使用它们作为识别用户的标准是没有意义的。为此,您应该使用应用程序范围的用户id。代码会定期重新颁发和更新访问令牌。这是一个无法存储任何可识别信息的项目,因此用户id是禁止的。不幸的是,不允许存储任何“可识别”信息的身份验证系统?我觉得没什么意义。此外,用户访问令牌还可以使用户“可识别”,因此整个论点本身就不攻自破。这是大学研究的一部分,因此我们需要能够跟踪个人数据,但不能识别数据属于谁。访问令牌本身不提供指向Facebook应用程序之外的用户的链接,并在刷新令牌后使以前的令牌无效。此外,访问令牌将在DB中与密码一样加密,以实现二级安全。访问令牌有一个过期时间,它们不会永远有效。因此,使用它们作为识别用户的标准是没有意义的。为此,您应该使用应用程序范围的用户id。代码会定期重新颁发和更新访问令牌。这是一个无法存储任何可识别信息的项目,因此用户id是禁止的。不幸的是,不允许存储任何“可识别”信息的身份验证系统?我觉得没什么意义。此外,用户访问令牌还可以使用户“可识别”,因此整个论点本身就不攻自破。这是大学研究的一部分,因此我们需要能够跟踪个人数据,但不能识别数据属于谁。访问令牌本身不提供指向Facebook应用程序之外的用户的链接,并在令牌刷新后使以前的令牌失效。此外,访问令牌将在DB中与密码一样加密,以实现二级安全。
 $fb_token = $_POST['access_token'];
 $fb_token = '** hard coded access token **';