gpt4 book ai didi

zend-framework - 在 Zend 框架中使用 OpenID

转载 作者:行者123 更新时间:2023-12-04 06:52:05 32 4
gpt4 key购买 nike

我希望我的网站完全符合 Stackoverflow 对 openId 的作用。

我正在梳理资源,我以前用 facebook 做过这个,但是
OpenID 没有取得太大进展。

我想做的只是检测是否有人登录了谷歌,
如果他们获得了一些识别信息,并允许他们
联合到我的网站。

任何人都可以建议任何教程或代码片段,我应该使用 Zends 库吗?

-P

最佳答案

/**
* SM's code library
*
* @category
* @package
* @subpackage
* @copyright Copyright (c) 2009 Pavel V Egorov
* @author Pavel V Egorov <epavel@gmail.com>
* @link http://epavel.ru/
* @since 29.04.2010
*/

/*
* в configs/application.ini
*
* ;php-openid library
* includePaths[] = APPLICATION_PATH "/../include/php-openid-2.1.3"
* autoloadernamespaces[] = Auth_
*/


define ('Auth_Yadis_CURL_OVERRIDE', true);
define ('Auth_OpenID_RAND_SOURCE', null);

class Smapp_Auth_Adapter_OpenId implements Zend_Auth_Adapter_Interface
{
/**
* The identity value being authenticated
*
* @var string
*/
protected $_id = null;

/**
* Reference to an implementation of a storage object
*
* @var Auth_OpenID_OpenIDStore
*/
protected $_storage = null;

/**
* The URL to redirect response from server to
*
* @var string
*/
protected $_returnTo = null;

/**
* The HTTP URL to identify consumer on server
*
* @var string
*/
protected $_root = null;

/**
* Extension object or array of extensions objects
*
* @var string
*/
protected $_extensions = null;

/**
* The response object to perform HTTP or HTML form redirection
*
* @var Zend_Controller_Response_Abstract
*/
protected $_response = null;

/**
* Enables or disables interaction with user during authentication on
* OpenID provider.
*
* @var bool
*/
protected $_check_immediate = false;

/**
* Constructor
*
* @param string $id the identity value
* @param Auth_OpenID_OpenIDStore $storage an optional implementation
* of a storage object
* @param string $returnTo HTTP URL to redirect response from server to
* @param string $root HTTP URL to identify consumer on server
* @param mixed $extensions Auth_OpenID_Extension extension object or array of extensions objects
* @param Zend_Controller_Response_Abstract $response an optional response
* object to perform HTTP or HTML form redirection
* @return void
*/
public function __construct($id = null,
Auth_OpenID_OpenIDStore $storage = null,
$returnTo = null,
$root = null,
$extensions = null,
Zend_Controller_Response_Abstract $response = null) {
$this->_id = $id;
$this->_storage = $storage;
$this->_returnTo = $returnTo;
$this->_root = $root;
$this->_extensions = $extensions;
$this->_response = $response;

//нужно потому что автозагрузчик зенда найти не может. там куча классов в одном файле
require_once 'Auth/OpenID/SReg.php';
require_once 'Auth/OpenID/PAPE.php';
}

/**
* Authenticates the given OpenId identity.
* Defined by Zend_Auth_Adapter_Interface.
*
* @throws Zend_Auth_Adapter_Exception If answering the authentication query is impossible
* @return Zend_Auth_Result
*/
public function authenticate() {

$id = $this->_id;

$consumer = new Auth_OpenID_Consumer($this->_storage);

if (!empty($id)) {

$authRequest = $consumer->begin($id);

if (is_null($authRequest)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", 'Unknown error'));
}

if (Auth_OpenID::isFailure($authRequest)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", "Could not redirect to server: " . $authRequest->message));
}

$redirectUrl = $authRequest->redirectUrl($this->_root, $this->_returnTo);

if (Auth_OpenID::isFailure($redirectUrl)) {
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
$id,
array("Authentication failed", $redirectUrl->message));
}

Zend_OpenId::redirect($redirectUrl);

} else {

$response = $consumer->complete(Zend_OpenId::selfUrl());

switch($response->status) {

case Auth_OpenID_CANCEL:
case Auth_OpenID_FAILURE:
return new Zend_Auth_Result(
Zend_Auth_Result::FAILURE,
null,
array("Authentication failed. " . @$response->message));
break;

case Auth_OpenID_SUCCESS:
return $this->_constructSuccessfulResult($response);
break;
}
}
}

/**
* @param Auth_OpenID_ConsumerResponse $response
* @return Zend_Auth_Result
*/
protected function _constructSuccessfulResult(Auth_OpenID_ConsumerResponse $response)
{
$identity = array();

$identity['openid_identity'] = $response->getDisplayIdentifier();

if ($response->endpoint->canonicalID) {
$identity['openid_op_endpoint'] = $response->endpoint->canonicalID;
}
if ($sreg = Auth_OpenID_SRegResponse::fromSuccessResponse($response)) {
$identity['sreg'] = $sreg->contents();
}
if ($pape = Auth_OpenID_PAPE_Response::fromSuccessResponse($response)) {
$identity['pape'] = (array)$pape;
}

return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $identity, array("Authentication successful"));
}

/**
* Sets the storage implementation which will be use by OpenId
*
* @param Auth_OpenID_OpenIDStore $storage
* @return Smapp_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setStorage(Auth_OpenID_OpenIDStore $storage)
{
$this->_storage = $storage;
return $this;
}

/**
* Sets the value to be used as the identity
*
* @param string $id the identity value
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setIdentity($id)
{
$this->_id = $id;
return $this;
}

/**
* Sets the HTTP URL to redirect response from server to
*
* @param string $returnTo
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setReturnTo($returnTo)
{
$this->_returnTo = $returnTo;
return $this;
}

/**
* Sets HTTP URL to identify consumer on server
*
* @param string $root
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setRoot($root)
{
$this->_root = $root;
return $this;
}

/**
* Sets OpenID extension(s)
*
* @param mixed $extensions
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setExtensions($extensions)
{
$this->_extensions = $extensions;
return $this;
}

/**
* Sets an optional response object to perform HTTP or HTML form redirection
*
* @param string $root
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setResponse($response)
{
$this->_response = $response;
return $this;
}

/**
* Enables or disables interaction with user during authentication on
* OpenID provider.
*
* @param bool $check_immediate
* @return Zend_Auth_Adapter_OpenId Provides a fluent interface
*/
public function setCheckImmediate($check_immediate)
{
$this->_check_immediate = $check_immediate;
return $this;
}
}

现实世界的例子
http://zonabarahla.ru/users/auth/login

来源: http://zonabarahla.ru/users/auth/login?show-me-the-truth

是使用 http://openidenabled.com/files/php-openid/packages/php-openid-2.1.3.zip
class Users_View_Helper_UsersLinker extends Zend_View_Helper_Abstract
{
/**
* @var Zend_View_Helper_Url
*/
protected static $_urlHelper;

/**
* @return Users_View_Helper_UsersLinker
*/
public function usersLinker()
{
return $this;
}


public function viewProfile($id)
{
$options = array(
'controller' => 'view',
'action' => 'profile',
'id' => (int)$id
);
return $this->_url($options);
}

public function viewList()
{
$options = array(
'controller' => 'view',
'action' => 'list',
);
return $this->_url($options);
}

public function crudUpdate($id)
{
$options = array(
'controller' => 'crud',
'action' => 'update',
'id' => (int)$id
);
return $this->_url($options);
}


public function login()
{
$options = array(
'controller' => 'auth',
'action' => 'login',
);
$url = $this->_url($options);
return $url;
}

public function logout()
{
$options = array(
'controller' => 'auth',
'action' => 'logout'
);
return $this->_url($options);
}

/**
* @return Zend_View_Helper_Url
*/
public function getUrlHelper()
{
if (null === self::$_urlHelper) {
self::$_urlHelper = new Zend_View_Helper_Url();
}
return self::$_urlHelper;
}

protected function _url($options, $routeName = null, $reset = true)
{
$urlHelper = $this->getUrlHelper();
if (empty($options['module'])) {
$options['module'] = $this->_getModuleName();
}

return $urlHelper->url($options, is_null($routeName) ? 'default' : $routeName, $reset);
}

protected function _getModuleName()
{
$moduleName = substr(get_class($this), 0, strpos(get_class($this), '_'));
return strtolower($moduleName);
}
}

关于zend-framework - 在 Zend 框架中使用 OpenID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968607/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com