Ajax Facebook登录+;Drupal8自定义模块。在db_select中不允许/检测到POST变量
我在Drupal8中创建了一个自定义模块,允许用户使用facebook登录进行身份验证。他们的访问令牌会根据数据库中存储的令牌进行检查,如果匹配,则会验证用户,如果不匹配,则会将他们重定向到允许他们将Facebook帐户链接到Drupal用户的页面 登录按钮为: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
<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 **';