如何为WordPress身份验证添加额外因素

时间:2014-08-13 作者:Mark Kaplun

具体的想法是将用户绑定到特定的IP地址。在登录时,使用用户的IP地址设置一个cookie,然后在每个身份验证过程中对照发送cookie的地址进行检查。明确地说,如果我在咖啡馆使用笔记本电脑通过WiFi登录,然后尝试在家继续使用互联网连接,我确实希望身份验证失败。

从表面上看wp_validate_auth_cookie 是添加附加检查的位置,但它不提供任何有用的过滤器。我想我可以重写这个函数,但这将是我最后的选择,有人对如何实现它有更清晰的想法吗?

1 个回复
SO网友:karpstrucking

我不知道我会为此使用cookie,因为用户可以修改cookie以匹配当前IP。您可以在注册时将用户的IP存储为用户元,然后通过wp_authenticate_user 滤器

示例代码(未测试):

add_action( \'user_register\', \'wpse157630_add_user_ip\', 10, 1 );
function wpse157630_add_user_ip( $user_id ) {
  update_user_meta( $user_id, \'wpse157630_ip_address\', $_SERVER[\'REMOTE_ADDR\'] );
}

add_filter( \'wp_authenticate_user\', \'wpse157630_check_user_ip\', 10, 2 );
function wpse157630_check_user_ip( $user, $password ) {
  $stored_ip = get_user_meta( $user->ID, \'wpse157630_ip_address\', true );
  if ( $stored_ip == $_SERVER[\'REMOTE_ADDR\'] ) {
    return $user;
  } else {
    return new WP_Error( \'invalid_ip_address\', \'Invalid IP address\' );
  }
}
如果你想发疯,可以将用户元存储为IP地址数组,并在用户编辑屏幕中添加一个点,允许用户添加多个IP地址进行比较。

结束

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo