meta-tech / pws-server
PwsServer 是一个使用 PwsAuth 协议管理网络服务的 silex2 网络应用程序框架
1.0.2
2017-03-21 02:49 UTC
Requires
- meta-tech/silex-core: 1.0.3
This package is not auto-updated.
Last update: 2024-09-28 20:56:00 UTC
README
PwsServer 是一个使用 PwsAuth 协议管理网络服务的 silex2 网络应用程序框架
要求
- PHP 7.0
- meta-tech/silex 2
- meta-tech/silex-core
- meta-tech/pws-client (用于测试 ws)
安装
可以使用 Composer 安装此包。
composer require meta-tech/pws-server
或者将包添加到您的 composer.json
文件中。
"require": {
"meta-tech/pws-server" : "^1.0"
}
使用方法
请参阅 MetaTech\Silex\Provider\ControllerServiceProvider 以管理应用程序中的控制器和路由
namespace MetaTech\PwsServer; use MetaTech\Silex\Application as App; use MetaTech\Silex\Provider\ControllerServiceProvider as CtrlProvider; use MetaTech\Silex\Provider\UserProvider; use MetaTech\Db\PdoWrapper; use MetaTech\Db\Profile; use MetaTech\PwsAuth\Authenticator; use MetaTech\PwsServer\Ctrl\Test; use MetaTech\PwsServer\Ctrl\WebService; use MetaTech\PwsServer\Ctrl\OtherWebService; class Application extends App { protected function setServices() { $app = $this; $app['ws.authenticator'] = function ($app) { return new Authenticator($app['config']['pwsauth']); }; $app['pdo'] = function ($app) { return new PdoWrapper(new Profile($app['config']['db']['default'])); }; $app['user.provider'] = function ($app) { return new UserProvider($app['pdo']); }; } protected function routingDefinition() { $this->register(new CtrlProvider(Test::class , [$this], '/')); $this->register(new CtrlProvider(WebService::class , [$this], '/ws')); $this->register(new CtrlProvider(OtherWebService::class, [$this], '/ws/deep')); } }
控制器示例
use Silex\ControllerCollection; use Symfony\Component\HttpFoundation\Request; use MetaTech\PwsServer\Ws\Controller; class WebService extends Controller { public function index(Request $request) { $done = true; $msg = 'this is index'; return $this->response($done, $msg); } public function routing(ControllerCollection $collection) : ControllerCollection { $collection = parent::routing($collection); $_ = $this->ns(); $collection->match('/', "$_:index"); return $collection; } }
pwsAuth
认证机制已由 MetaTech\Silex\Ws\Controller
父类和 MetaTech\Silex\Ws\Authentication
处理器(在 meta-tech/silex-core 包中)提供
查看 OtherWebService
以了解另一个控制器和根入口点 /ws 中的深层路由。主要区别在于不调用父级路由方法,但 pwsauth 认证仍然有效。
项目现在通过 userProvider
实现 checkUser
方法
它使用 MetaTech\Silex\Ws\Authentication
和 MetaTech\Silex\Ws\Controller
子类
namespace MetaTech\PwsServer\Ws; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface; use MetaTech\PwsAuth\Authenticator; use MetaTech\Silex\Ws\Authentication as BaseAuthentication; use MetaTech\Silex\Provider\UserProvider; class Authentication extends BaseAuthentication { protected $userProvider; public function __construct(Session $session, Authenticator $authenticator, PasswordEncoderInterface $passEncoder = null, UserProvider $userProvider) { parent::__construct($session, $authenticator, $passEncoder); $this->userProvider = $userProvider; } public function checkUser($login, $password, $key, PasswordEncoderInterface $passEncoder = null) { $done = false; try { if (!is_null($passEncoder)) { $user = $this->userProvider->loadUserByUsername($login); $salt = $this->authenticator->getUserSalt($login); $done = $user->key == $key && $passEncoder->encodePassword($password, $salt) == $user->getPassword(); } } catch(\Exception $e) { //~ var_dump($e->getTraceAsString()); } return $done; } }
控制器
namespace MetaTech\PwsServer\Ws; use Silex\Application; use MetaTech\Silex\Ws\Controller as BaseController; use MetaTech\PwsServer\Ws\Authentication; class Controller extends BaseController { public function __construct(Application $app = null) { $this->session = $app['session']; $this->handler = new Authentication($this->session, $app['ws.authenticator'], $app['security.encoder.pbkdf2'], $app['user.provider']); } }
测试 URI
通过网页浏览器访问
- servername/
- servername/test
通过 pws-client 访问
- servername/ws
- servername/ws/deep
- servername/ws/isauth
许可证
该项目在 MIT 许可证下发布,请参阅 LICENSE 文件。