【问题标题】:ZfcUser authentication for an APIAPI 的 ZfcUser 身份验证
【发布时间】:2014-01-04 11:51:32
【问题描述】:

在我目前正在做的项目中,我有以下情况:有一个Web应用程序可供人类用户通过浏览器访问,用户可以在其中操作数据库中的数据(代表家庭设备的状态)一个房子)在他登录后。记录功能是用 ZfcUser 模块实现的。此外,计算机(与设备一起安装在房屋中并负责打开和关闭它们的树莓派)可以访问该应用程序,它可以查看数据库的状态并做出相应的反应。

计算机和应用程序之间的通信是使用 JSON 实现的,并且工作正常。但是现在,计算机不会发送任何用户特定的信息(电子邮件、密码……),因此任何对正确 URL 的发布请求都可以访问树莓派使用的应用程序功能。我想将用户的电子邮件和密码包含在计算机发送的 JSON 对象中,以便在执行功能之前,Web 应用程序检查请求是否有效。

我想知道的是是否有一个简单的可能性来检查凭据(电子邮件和密码,都表示为字符串)是否有效使用 ZfcUser (如果我理解正确,zfcUserAuthentification() 方法不能用于此任务,因为它们使用浏览器存储的 cookie)。

【问题讨论】:

  • 应用程序在任何情况下都可以使用 cookie。如果 GUI 是在 Linux 下编写的,很可能是这个 QT,因此 - WebKit。如果应用程序是在 Windows 下编写的(基于 MFC/ATL/等) - 使用 MSHTML.DLL
  • 我也想了解更多关于如何使用仅 JSON 视图类型的服务器实现 ZFCUser..

标签: zend-framework2 zfcuser


【解决方案1】:

您可以使用 httprequest 并使用来自 JSON POST 的凭据填充它,然后在调用 prepareForAuthentication

后尝试对其进行身份验证
$adapter = $this->zfcUserAuthentication()->getAuthAdapter();
    /** @var \Zend\Http\Request */
    $fakeRequest = $this->getRequest();
    $fakeRequest->getPost()->set('identity', $username);
    $fakeRequest->getPost()->set('credential', $password);
    $result = $adapter->prepareForAuthentication($this->getRequest());

    // Return early if an adapter returned a response
    if ($result instanceof Response) {
        throw new LoginException("");
    }

    $auth = $this->zfcUserAuthentication()->getAuthService()->authenticate($adapter);

    if (!$auth->isValid()) {
        $this->flashMessenger()->setNamespace('zfcuser-login-form')->addMessage($this->failedLoginMessage);
        $adapter->resetAdapters();
        // Password does not match
        throw new LoginException("Invalid Username or password");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2016-04-12
    • 1970-01-01
    • 2011-11-28
    • 2011-03-29
    • 2013-09-11
    • 2018-08-07
    • 2015-05-15
    相关资源
    最近更新 更多