我正在與Silex的安全提供商第一次合作,並且我遇到了這個過程中的問題。我目前有基本的HTTP驗證工作(使用編碼示例用戶,如here in the docs所示)。Silex安全提供商 - 令牌未能設置
當爲表單選項切換HTTP時,登錄表單正在提交併返回自己。我創建了UserProvider
類,並且loadUserByUsername
方法正在成功調用,但是電子郵件未被傳入(被設置爲"NONE_PROVIDED"
- 從用戶名更改)。我在通過供應商代碼工作時發現這是因爲未設置令牌($app['security']->getToken()
在所有點都返回空值)。我瀏覽了所有可以找到的文檔,但我找不到任何提及的內容。
主要代碼包含在下面,讓我知道如果還有其他東西,謝謝!
安全提供配置
// Protects all routes within /auth, redirecting to /login successfully
$app->register(new SecurityServiceProvider(), array(
'security.firewalls' => array(
'unauth_area' => array(
'pattern' => '^/(?!auth)'
),
'auth_area' => array(
'pattern' => '^/.*$',
'form' => array(
'login_path' => '/login',
'check_path' => '/auth/login_check',
'default_target_path' => '/auth/overview',
),
'users' => $app->share(function() use ($app) {
return new UserProvider($app['db']);
}),
),
),
'access_control' => array(
array('path' => '^/.*$', 'role' => 'ROLE_USER'),
// Include the following line to also secure the /admin path itself
// array('path' => '^/admin$', 'role' => 'ROLE_ADMIN'),
),
));
(我的自定義)方法 - UserProvider類
public function loadUserByUsername($email) {
// Dying at this point shows it reaches here, but $email is null
$stmt = $this->conn->executeQuery('SELECT * FROM user WHERE email = ?', array(strtolower($email)));
if (!$user = $stmt->fetch()) {
throw new UsernameNotFoundException(sprintf('Email "%s" does not exist.', $email));
}
return new User($user['email'], $user['password'], explode(',', $user['roles']), true, true, true, true);
}
Form類
class LoginType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('_username', 'text', array(
'required' => true,
'constraints' => array(
new Assert\NotBlank(),
new Assert\Email(),
)
))
->add('_password', 'password', array(
'required' => true,
'constraints' => array(
new Assert\NotBlank(),
),
))
->add('Login', 'submit');
}
public function getName() {
return 'login';
}
}
你也可以發佈你的表單嗎?用戶名元素仍然被稱爲「_username」? –
此外,爲了確保,請檢查以下內容:「如果您使用表單來驗證用戶,則需要啓用SessionServiceProvider.' –
我已經包含表單,我嘗試將其還原爲」_username「讓它工作(我達到了漫無目的的修補階段,所以我嘗試了各種各樣)。包含依賴關係(作曲家)並且安全提供程序已註冊,如果這就是您的意思? –