从我的网站登录到wordpress网站

时间:2012-10-30 08:05:10

标签: php wordpress zend-framework login

我有一个使用Zend Framework开发的网站。我也有一个Wordpress网站放在同一台服务器上。当我登录Zend网站时,是否可以使用任何(e:g AJAX调用)登录Wordpress网站。

原因:

我在Zend网站上有一个word press blog的链接,当我点击该链接时,它会带我到Wordpress登录页面。

我希望用户可以按照登录用户的身份按文字页面链接。

我对此进行了很多研究,但没有找到正确的路径。

感谢。

3 个答案:

答案 0 :(得分:0)

禁止在两个不同的域名之间使用AJAX,您可以在PHP中使用Curl函数。 http://bit.ly/RBGgfp

答案 1 :(得分:0)

您的问题存在安全问题。如何将凭证从一个网站传递到另一个网站而不实际传递它们......

您需要某种授权过程,告诉WP,登录到WP的用户实际上是已经登录到Zend的用户。为此,您不能只是在从ZF到WP的Ajax调用中传递用户名和密码,因为每个人都可以从缓存的JS源代码中获取用户的密码。 此外,你不能只在ajax调用中传递用户名,因为这样每个人都可以进行这样的ajax调用以其他人的身份登录。

通常,您应该尽可能地限制通过客户端请求(Ajax)传递授权。

这样做的一种方式是许多称为OAuth的社交网络(即Facebook)使用的机制。 Facebook使用特殊令牌进行授权,并且在Facebook和使用Facebook连接机制的网站之间不传递凭据。 Facebook也使用PHP的curl函数来进行跨服务器调用,因此在客户端没有关于授权过程的任何痕迹。

你可以,但你不必使用OAuth,但如果你这样做,这将是一个很好的经验。

您面临的另一个问题是,您的ZF和WP可能在客户端使用不同的授权Cookie。因此,当在ZF网站上授权用户时,您还需要对负责登录的WP页面进行Ajax调用,以确保设置正确的cookie。

Summa summarum流程类似于此(假设已在两个站点上创建了用户帐户):

  1. 在ZF网站上登录用户。
  2. 从ZF发出包含用户ID(例如)的curl调用到WP页面,该页面将返回某种随机生成的令牌(如果存在给定ID的用户)。
  3. 一旦你的curl调用从WP收到令牌,生成带有JS的ZF网页,这使得Ajax调用WP(如何向WP发送Ajax调用解释如下:http://codex.wordpress.org/AJAX_in_Plugins) 此Ajax调用应包含类似md5哈希用户ID和令牌的内容。
  4. 现在在WP方面,WP将以散列值接收ZF的Ajax调用。因此,请检查此值是否与WP之前返回的用户ID和令牌之后的值相同(在步骤2中)。如果是,则在WP站点上登录用户。
  5. 现在,因为我们不会将用户密码从ZF发送到WP(我们在WP方面也不知道它 - 因为它是加密的)你不能使用wp_signon来登录用户。但是你可以使用wp_set_auth_cookie,为了这个特殊目的就足够了。

    这是一个粗略的解释,但我希望它会有所帮助。

    P.S。不推荐使用wp_login,您应该避免使用它。

    此外,wp_login操作不会调用wp_set_auth_cookie,这可能是您的用户未首先显示为登录状态的原因。

    使用wp_set_auth_cookie尝试您的解决方案。我最后这样说,所以你不要错过上面的安全问题。

答案 2 :(得分:0)

由于两个站点都在同一台服务器上,因此您可以从Zend和WordPress访问文件。当用户登录到基于Zend的站点时,您可以添加一个调用来加载基本的wordpress文件,然后使用函数wp_set_auth_cookie()将用户登录到wordpress。

require_once 'wordpress-directory/wp-load.php';
wp_set_auth_cookie( $wp_user_id );

在Zend网站上的用户表格中,您可以添加一列wp_user_id来存储用户的wordpress用户ID,以便了解传递wp_set_auth_cookie()功能的用户ID。

如果你想要查看它,我会用更一般的术语写一篇博客文章here