65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 IMAP 进行身份验证

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (4投票s)

2014年5月27日

CPOL

2分钟阅读

viewsIcon

13363

使用 IMAP 对应用程序进行身份验证

引言

大多数应用程序都有一个身份验证过程,它赋予用户使用应用程序的权限。通常,用户凭据存储在数据库表中,或者使用第三方 API(如 Facebook)来验证用户。 在本文中,我将解释如何使用 IMAP 身份验证来授予用户访问您的应用程序的权限。

如果您正在开发一个不需要用户身份信息的应用程序,并且在 IMAP 服务器上拥有电子邮件帐户,那么您可以使用电子邮件帐户的登录凭据来验证您的用户。

考虑以下场景:您维护一个公司应用程序。 当新员工加入公司时,网络管理员会为其提供一个电子邮件帐户。 您的应用程序可以使用员工的电子邮件帐户来验证员工,这意味着您的应用程序无需创建登录帐户。 当员工离开公司时,网络管理员会禁用他们的电子邮件帐户,从而拒绝员工访问您的应用程序。 采用这种方法,所有用户帐户都集中管理。 其中一个缺点是,除了电子邮件地址之外,不存在用户的任何身份信息。 为了使您的应用程序能够选择性地允许哪些用户访问您的应用程序,您需要一个单独的查找数据存储,例如数据库或 XML 数据文件。 这种方法主要适用于不需要身份信息且任何拥有电子邮件帐户的人都可以访问该应用程序的应用程序,例如公司留言板,其中电子邮件地址可用于识别员工。

下面提供的代码使用 IMAP 协议及其 LOGIN 命令来验证电子邮件帐户。

class ImapAuthentication {
    protected $con;

    public function __construct($host, $port){
        $this->con = fsockopen($host, $port, $errno, $errstr, 30);
        $this->getResponse();
    }

    public function authenticate($username, $password){
        fwrite($this->con, 'A1 LOGIN ' . $username . ' ' . $password . PHP_EOL);
        return $this->getResponse();
    }

    protected function getResponse(){
        while(true){
            $line = fgets($this->con);
            $segments = explode(' ', $line);
            if($segments[1] =='OK'){
                return true;
            }elseif($segments[1] =='NO'){
                return false;
            }
        }
    }
}

Using the Code

$imapAuth = new ImapAuthentication('ssl://imap.gmail.com', 993);
$auth = $imapAuth->authenticate('username', 'password');

if($auth){
    echo 'Login Success';
}else{
    echo 'Login failed';
}

注意:对于 SSL 连接,您必须启用 php_openssl 扩展。

这标志着本文的结束。 请随时留下您的评论和建议。

历史

  • 2014 年 5 月 27 日:初始版本
© . All rights reserved.