crada / phalcon-user-plugin
Phalcon PHP 框架的用户插件
3.0.13
2017-12-11 14:13 UTC
Requires
- php: >=5.3.2
- facebook/graph-sdk: 5.4.*
- google/apiclient: 2.2.*
- imagine/imagine: 0.6.*
- paragonie/random_compat: 2.0.*
- swiftmailer/swiftmailer: 5.4.*
Requires (Dev)
- phalcon/devtools: dev-master
- phalcon/incubator: dev-master
- phpunit/phpunit: 4.6.*
This package is not auto-updated.
Last update: 2024-09-14 15:27:10 UTC
README
我们已经切换到 facebook/graph-sdk 5.4 !
$ composer require crada/phalcon-user-plugin:^3.0
Phalcon 用户插件 (v 2.0)
关于
这是一个基于 Vokuro ACL 概念的插件。
特性
- 使用 Facebook 账户登录 / 注册
- 使用 LinkedIn 账户登录 / 注册
- 使用 Twitter 账户登录 / 注册
- 使用 Google 账户登录 / 注册
- 更改密码
- 通过电子邮件恢复密码
- 保护网站的不同区域,用户必须登录才能访问
- 根据每个用户的 ACL 列表保护不同的操作
- 用户资料:出生日期、出生地点、当前位置、个人照片
- 位置 - 使用 Google API 保存位置 - 请参阅 Wiki 中的示例
- 简单的通知系统
安装
推荐通过 Composer 安装。只需将以下行添加到您的 composer.json
{ "require": { "crada/phalcon-user-plugin": "~2.0" } }
$ php composer.phar update
插入插件
将以下行添加到事件管理器中
$security = new \Phalcon\UserPlugin\Plugin\Security($di); $eventsManager->attach('dispatch', $security);
完整示例代码
use Phalcon\UserPlugin\Plugin\Security as SecurityPlugin; use Phalcon\Mvc\Dispatcher; $di->setShared( 'dispatcher', function() use ($di) { $eventsManager = $di->getShared('eventsManager'); $security = new SecurityPlugin($di); $eventsManager->attach('dispatch', $security); $dispatcher = new Dispatcher(); $dispatcher->setEventsManager($eventsManager); return $dispatcher; } );
注册 Auth、Mail 和 Acl 服务
use Phalcon\UserPlugin\Auth\Auth; use Phalcon\UserPlugin\Acl\Acl; use Phalcon\UserPlugin\Mail\Mail; $di->setShared( 'auth', function() { return new Auth(); } ); $di->setShared( 'acl', function() { return new Acl(); } ); $di->setShared( 'mail', function() { return new Mail(); } );
配置
您必须将配置键添加到您的 config.php 文件中。如果您正在使用多模块应用程序,我建议您为每个模块分别设置配置。
配置示例
在下面的示例中,您将网站视为公开,除了用户控制器的 ACCOUNT 和 PROFILE 动作
'pup' => [ 'redirect' => [ 'success' => 'user/profile', 'failure' => 'user/login' ], 'resources' => [ 'type' => 'public', 'resources' => [ '*' => [ // All except 'user' => ['account', 'profile'] ] ] ] ];
在下面的示例中,唯一的公开资源是用户控制器的 LOGIN 和 REGISTER 动作
'pup' => [ 'redirect' => [ 'success' => 'user/profile', 'failure' => 'user/login' ], 'resources' => [ 'type' => 'public', 'resources' => [ 'user' => [ 'user' => ['login', 'register'] ] ] ] ];
在下面的示例中,您将网站视为私人,除了用户控制器的 LOGIN 和 REGISTER 动作
'pup' => [ 'redirect' => [ 'success' => 'user/profile', 'failure' => 'user/login' ], 'resources' => [ 'type' => 'private', 'resources' => [ '*' => [ // All except 'user' => ['login', 'register'] ] ] ] ];
在下面的示例中,唯一的私人资源是用户控制器的 ACCOUNT 和 PROFILE 动作
'pup' => [ 'redirect' => [ 'success' => 'user/profile', 'failure' => 'user/login' ], 'resources' => [ 'type' => 'private', 'resources' => [ 'user' => [ 'user' => ['account', 'profile'] ] ] ] ];
带有连接器的配置示例
// phalcon-user-plugin 'pup' => [ 'redirect' => [ 'success' => 'user/profile', 'failure' => 'user/login' ], 'resources' => [ 'type' => 'public', 'resources' => [ '*' => [ // All except 'user' => ['account', 'profile'] ] ] ], 'connectors' => [ 'facebook' => [ 'appId' => 'YOUR_FACEBOOK_APP_ID', 'secret' => 'YOUR_FACEBOOK_APP_SECRET' ], 'linkedIn' => [ 'api_key' => 'YOUR_LINKED_IN_APP_ID', 'api_secret' => 'YOUR_LINKED_IN_APP_SECRET', 'callback_url' => 'CALLBACK_URL' ], 'twitter' => [ 'consumer_key' => 'TWITTER_CONSUMER_KEY', 'consumer_secret' => 'TWITTER_CONSUMER_SECRET', // Leave empty if you don't want to set it 'user_agent' => 'YOUR_APPLICATION_NAME' ], 'google' => [ 'application_name' => 'YOUR_APPLICATION_NAME', 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'developer_key' => 'YOUR_DEVELOPER_KEY', 'redirect_uri' => 'YOUR_REDIRECT_URI' ] ] ];
示例控制器
- 要获取完整的控制器示例,请阅读 Wiki 页面:https://github.com/calinrada/PhalconUserPlugin/wiki/Controller
class UserController extends Controller { /** * Login user * @return \Phalcon\Http\ResponseInterface */ public function loginAction() { if (true === $this->auth->isUserSignedIn()) { $this->response->redirect(['action' => 'profile']); } $form = new LoginForm(); try { $this->auth->login($form); } catch (AuthException $e) { $this->flash->error($e->getMessage()); } $this->view->form = $form; } /** * Login with Facebook account */ public function loginWithFacebookAction() { try { $this->view->disable(); return $this->auth->loginWithFacebook(); } catch(AuthException $e) { $this->flash->error('There was an error connectiong to Facebook.'); } } /** * Login with LinkedIn account */ public function loginWithLinkedInAction() { try { $this->view->disable(); $this->auth->loginWithLinkedIn(); } catch(AuthException $e) { $this->flash->error('There was an error connectiong to LinkedIn.'); } } /** * Login with Twitter account */ public function loginWithTwitterAction() { try { $this->view->disable(); $this->auth->loginWithTwitter(); } catch(AuthException $e) { $this->flash->error('There was an error connectiong to Twitter.'); } } /** * Login with Google account */ public function loginWithGoogleAction() { try { $this->view->disable(); $this->auth->loginWithGoogle(); } catch(AuthException $e) { $this->flash->error('There was an error connectiong to Google.'); } } /** * Logout user and clear the data from session * * @return \Phalcon\Http\ResponseInterface */ public function signoutAction() { $this->auth->remove(); return $this->response->redirect('/', true); } }
已知问题
- Twitter 不提供电子邮件。我们为用户生成一个随机电子邮件。您可以选择如何处理这个问题
示例
待办事项
- 实现 ACl、UserManagement 等的 CRUD 模板