【发布时间】:2014-02-25 21:19:51
【问题描述】:
我是 Silex 的新手,我使用 this tutorial 设置 Doctrine ORM。
但现在当我尝试登录时,我收到“凭据错误”错误。 当我使用默认的“login_check”控制器时会发生这种情况。
如果我使用自定义的,它可以工作,但我不知道如何将用户重定向到他正在寻找的页面。 (我在登录控制器中尝试了 $request->headers->get('referer') 但它是空的。)
这是我的自定义 login_check 控制器:
$app->post('/login-check-perso', function(Request $request) use ($app){
$route = $request->request->filter('route');
$password = $request->get('_password');
$username = $request->get('_email');
$userProvider = new \Lib\Provider\UserProvider($app);
$user = null;
try {
$user = $userProvider->loadUserByUsername($username);
}
catch (UsernameNotFoundException $e)
{
}
$encoder = $app['security.encoder_factory']->getEncoder($user);
// compute the encoded password
$encodedPassword = $encoder->encodePassword($password, $user->getSalt());
// compare passwords
if ($user->getPassword() == $encodedPassword)
{
// set security token into security
$token = new UsernamePasswordToken($user, $password, 'yourProviderKeyHere', array('ROLE_ADMIN'));
$app['security']->setToken($token);
// redirect or give response here
} else {
// error feedback
echo "wrong password";
die();
}
// replace url by the one the user requested while he wasn't logged in
return $app->redirect('/web/index_dev.php/admin/');
})->bind('login_check_perso');
因此,如果有人可以解释如何使用默认的“login_check”,或者向我解释如何将用户重定向到他在未登录时尝试访问的页面,那就太好了。
谢谢
编辑:
我认为“Bad Credentials”是由错误的编码器设置引起的,我使用了this
配置我的:
$app['security.encoder.digest'] = $app->share(function ($app) {
// use the sha1 algorithm
// don't base64 encode the password
// use only 1 iteration
return new MessageDigestPasswordEncoder('sha1', false, 1);
});
$app['security.encoder_factory'] = $app->share(function ($app) {
return new EncoderFactory(
array(
'Symfony\Component\Security\Core\User\UserInterface' => $app['security.encoder.digest'],
'Entity\User' => $app['security.encoder.digest'],
)
);
});
对吗?
【问题讨论】:
标签: php symfony doctrine-orm silex