photon/auth-mongodb

MongoDB 的身份验证和用户

v3.0 2020-03-06 08:56 UTC

This package is auto-updated.

Last update: 2024-09-04 18:27:02 UTC


README

Build Status

photon 的用户、组和 acl 存储的 MongoDB 后端

快速开始

  1. 将模块添加到您的项目中

    composer require "photon/auth-mongodb:dev-master"

或指定版本

composer require "photon/auth-mongodb:^2.0"
  1. 在您的项目配置中定义 MongoDB 连接

声明您的 MongoDB 数据库

'databases' => array(
    'default' => array(
        'engine' => '\photon\db\MongoDB',
        'server' => 'mongodb://:27017/',
        'database' => 'orm',
        'options' => array(
            'connect' => true,
        ),
    ),
),
  1. 启用会话后端

身份验证模块使用会话来存储用户信息

'session_storage' => '\photon\session\storage\MongoDB',
'session_cookie_path' => '/',
'session_timeout' => 4 * 60 * 60,
'session_mongodb' => array(
    'database' => 'default',
    'collection' => 'session',
),
  1. 配置身份验证后端

配置身份验证后端以使用此模块

'auth_backend' => '\photon\Auth\MongoDBBackend',
  1. 创建用户

创建第一个用户以便登录

$user = new \photon\auth\MongoDBUser;
$user->setLogin('jd@exemple.com');
$user->setPassword('strong');
$user->save();
  1. 创建登录视图

在您的应用程序中添加登录视图,以下代码是最小的

class MyViews {
    public function login($request, $match)
    {
        if ($request->method === 'POST') {
            $user = \photon\auth\Auth::authenticate($request->POST);
            if ($user !== false) {
                \photon\auth\Auth::login($request, $user);
                return new Redirect('/');
            }
        }

	    return shortcuts\Template::RenderToResponse('login.html', array(), $request);
    }
}

在您的 urls 中声明登录视图。

array('regex' => '#^/login$#',
      'view' => array('\Dummy', 'dummy'),
      'name' => 'login_view')
  1. 享受 !

高级使用

自定义用户类

如果您想在用户类中添加特定于应用程序的内容,只需扩展它即可。这允许您更改存储对象集合的名称。

class MyUser extends \photon\auth\MongoDBUser
{
    const collectionName = 'foobarcollection';

    public function isAdmin()
    {
        return $this->admin;
    }
}

然后,您必须配置 MongoDB 身份验证后端以使用您的类。编辑您的 photon 配置文件以添加

'auth_mongodb' => array(
    'user_class' => '\My\App\MyUser',
)

使用 ACL 保护视图

以下 dummy 视图受前提条件的保护。类 MongoDBPrecondition 将加载名为 adminPanel 的 ACL 并确保用户可以访问此视图,否则将生成 403。

class Dummy
{
  public $dummy_precond = array(
  '\photon\auth\MongoDBPrecondition::adminPanel'
  );
  public function dummy($request, $match)
  {
    return new \photon\http\response\NoContent;
  }
}

ACL 可以使用以下代码创建

$acl = new \photon\auth\MongoDBAcl;
$acl->setName('adminPanel');
$acl->addUser($user);
$acl->save();

您可以使用以下代码确保创建所有 ACL,用户可以稍后添加。

\photon\auth\MongoDBAcl::ensureExists(['admin', 'api', 'ntp']);

模板中的条件渲染

您可以在模板中使用 MongoDBTemplateTag 来测试用户 ACL。

{acl 'adminPanel'}
Will be display only if the user have the adminPanel acl
{/acl}

模板必须在您的配置文件中声明

'template_tags' => array(
    'acl' => '\photon\auth\MongoDBTemplateTag',
)