Roundcube login via PHP script

简介: 目前正在整合 roundcube 1.0.5 的邮件系统和其他系统,想取消登录过程,发现了这个,先赞一个! 原文地址: http://blog.philippheckel.com/2008/05/16/roundcube-login-via-php-script/ Roundcube is an...

目前正在整合 roundcube 1.0.5 的邮件系统和其他系统,想取消登录过程,发现了这个,先赞一个!

原文地址: http://blog.philippheckel.com/2008/05/16/roundcube-login-via-php-script/

Roundcube is an AJAX/PHP based e-mail application which is really flexible and easy to use in comparison to other free web based solutions.

For the customer interface of Silversun, I wanted to use RC as the internal web mail application and therefore had to embed it into my system. To avoid that the customer has to log in twice (customer interface and Roundcube), I had to simulate the login request with a PHP script.

 


Contents

 


Updates

A lot has changed over the years. As of now (July 2013), the class does exist for over 5 years. Here’s what happened in this time:

  • November 2008: After the comment of Matias, I reviewed the code and fixed some issues. Now it should work properly even with the newest Roundcube version (0.2-beta). The class file itself contains installation instructions. Please read them carefully.
  • March 2009: Just tested the script with version 0.2.1 and it works like a charm, at least for my installation.
  • December 2009Diego just confirmed (via e-mail) that the script also works for 0.3.1 without modification.
  • May 2010: I just tested the scripts with Roundcube 0.4-beta, and it still works without modification. I also added the sectionDebugging make it easier to figure out what’s wrong.
  • March 2011: After Alex’ comment, I adjusted a small part of the script. It should now also work with Roundcube 0.5.1. It now handles the new request token correctly. The pre-0.5.1 script is still available for download here:RoundcubeLogin.pre-0.5.1.class.php (plain text).
  • April 2012: I have updated the script again. It now works with 0.7.2. Issues were PHP’s multiple-cookie handling, the sessauth-cookie as well as the user agent checks by RC. The pre-0.6 version is still available for download here:RoundcubeLogin.pre-0.6.class.php (plain text).
  • May 2013: According to Reznor’s comment, the script still works with 0.9.0.
  • July 2013: The class is currently used in the Roundcube ownCloud Plugin by Martin Reinhardt. There have been some issues with the altered version. Make sure to update to the newest version or report bugs here.
  • July 2013: After many user issues with SSL-hosted Roundcube installations, I finally got around to fix the SSL issues once and for all. The class now detects whether RC is running with SSL/TLS and set hostname, port and connection type accordingly. If that does not work, you can use setHostname(), setPort() and setSSL to adjust these settings to your environment. The old class is still available here: RoundcubeLogin.pre-0.9.2.class.php (plain text).

1. Prepare RC

To perform the Roundcube login via a web site, it is necessary to turn off the check_ip/ip_check option in the main.inc.php file, because our script (= server IP address) will send the login data and pass it to RC instead of the user’s browser (= user IP address).

2. The RoundcubeLogin class

This small class only consists of four functions and it shouldn’t be necessary to modify it in order to get the login to work.

The class provides four public methods:

  • login($username, $password)
    Perform a login to the Roundcube mail system.
    Note: If the client is already logged in, the script will re-login the user (logout/login). To prevent this behaviour, use theisLoggedIn()-function.
    ReturnsTRUE if the login suceeds, FALSE if the user/pass-combination is wrong
    Throws: May throw a RoundcubeLoginException if Roundcube sends an unexpected answer (that might happen if a new Roundcube version behaves differently)
  • isLoggedIn()
    Checks whether the client/browser is logged in and has a valid Roundcube session.
    ReturnsTRUE if the user is logged in, FALSE otherwise.
    Throws: May also throw a RoundcubeLoginException (see above).
  • logout()
    Performs a logout on the current Roundcube session.
    ReturnsTRUE if the logout was a success, FALSE otherwise.
    Throws: May also throw a RoundcubeLoginException (see above).
  • redirect()
    Simply redirects to Roundcube.
  • setHostname($hostname)
    Set hostname manually. Note that the hostname must point to the local machine. It does not work for remote machines.
  • setPort($port)
    Set port manually. Uses server port by default (auto detected).
  • setSSL($enableSSL)
    Enable or disable SSL for this connection. This value impacts the connection string for fsockopen(). If enabled, the prefix “ssl://” is attached. If NULL is set, the value of the $_SERVER['HTTPS'] variable is used.

3. Sample usage

The script below demonstrates how the class can be used. If the client is already logged in, it simply redirects the browser to the Roundcube application. If not, it performs a login and then redirects to Roundcube.

 

4. Debugging

If you’re having problems with the RoundcubeLogin.class.php class (plain text) itself, try using the rclogin.php-file (plain text) for debugging: open the file in your browser (http://myhost/roundcube/rclogin.php), and take a look at the output. TheRoundcubeLogin-class performs a series of request/response cycles and parses the output to figure out if you’re logged in.

Known issues:

  1. No Roundcube installation found at ‘…’
    This error message is thrown if the path-value in the RoundcubeLogin constructur was not set correctly. It must be set to the part of the URL that represents the path, e.g. in case of http://myhost/roundcube/ you must create the object like this:
  2. Unable to determine login-status due to technical problems.
    This error can occur in the methods login(), logout() and isLoggedIn(). The RoundcubeLogin-class expects Roundcube to send certain headers in response to the login/logout-requests. If those headers could not be found, this error is thrown. Possible reasons are:

     

    • New RC version
    • Cookies must be enabled
    • ip_check/check_ip option in the main.inc.php must be false
  3. Unable to determine the login status. Unable to continue due to technical problems.
    This error occurs if the script cannot determine if you are logged in or not, because the returned HTML code neither contains the login-form (= logged out) nor the message DIV (= logged in). This might happen if Roundcube changed the HTML-code.
  4. Test script “rclogin.php” says “400 Bad Request”: When you run the test script you get an error like this:

     

    The reason for this exception is that the hostname in the fsockopen() has been called without an “ssl://”-prefix. In the class you can fix this by calling $rcl->setSSL(true).

5. I’m open for suggestions

Please feel free to post your comment or suggestions. That’s the only way to ensure that it works with all versions.

目录
相关文章
|
PHP 数据安全/隐私保护 数据库
PHP 4:从Login进一步看到的
原文:PHP 4:从Login进一步看到的我们已经在PHP 3:从Login界面谈PHP标记谈到了PHP标记,不过其页面代码有一句 require_once('bookmark_fns.php'); 那我们就看看bookmark_fns.php这个文件吧。
1126 0
|
PHP
PHP获取当前url路径的函数及服务器变量:QUERY_STRING、REQUEST_URI、SCRIPT...
1,$_SERVER["QUERY_STRING"]说明:查询(query)的字符串 2,$_SERVER["REQUEST_URI"]说明:访问此页面所需的URI 3,$_SERVER["SCRIPT_NAME"]说明:包含当前脚本的路径 4,$_SERVER["PHP_SELF"]说明:当前正在执行脚本的文件名 实例:1,http://www.
1299 0
|
.NET PHP 开发框架
PHP 3:从Login界面谈PHP标记
原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例。OK,我们就从第一个页面Login页面入手吧。还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: 1 看见这些代码你有什么看法?OK,我下面一一做出解释:1)PHP如何从HTML分离   看看第1行和第9行,那么是  当 PHP 解析一个文件时,会寻找开始和结束标记,这里,开始标记是,如果你使用过ASP.NET,肯定还记得,它们的作用有点类似。
940 0
|
MySQL 关系型数据库 PHP
转载:Create a Flash Login System Using PHP and MySQL
本文共两部分: 1. http://dev.tutsplus.com/tutorials/create-a-flash-login-system-using-php-and-mysql-part-1--active-5147 2.
751 0
|
9月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
474 0
PHP和Mysql前后端交互效果实现
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
727 0
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
602 17
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
473 18