相关疑难解决方法(0)

自动注册后用户身份验证

我们正在Symfony 2中从头开始构建业务应用程序,我在用户注册流程中遇到了一些问题:在用户创建帐户后,他们应该使用这些凭据自动登录,而不是立即被迫再次提供他们的证书.

任何人都有这方面的经验,或能够指出我正确的方向?

php registration symfony

108
推荐指数
5
解决办法
3万
查看次数

如何以编程方式登录/验证用户?

我想在注册过程后立即登录用户,而不通过登录表单.

这可能吗 ?我找到了一个解决方案FOSUserBundle,但我没有在我正在进行的项目中使用它.

这是我的security.yml,我正在使用两个防火墙.纯文本编码器仅用于测试.

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        Ray\CentralBundle\Entity\Client: md5

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            users:
                admin: { password: admin, roles: [ 'ROLE_ADMIN' ] }
        entity:
            entity: { class: Ray\CentralBundle\Entity\Client, property: email }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        user_login:
            pattern:    ^/user/login$
            anonymous:  ~

        admin_login:
            pattern:    ^/admin/login$
            anonymous:  ~

        admin:
            pattern:    ^/admin
            provider: in_memory
            form_login:
                check_path: /admin/login/process
                login_path: /admin/login
                default_target_path: /admin/dashboard
            logout:
                path:   /admin/logout
                target: /

        site:
            pattern:    ^/
            provider: entity
            anonymous:  ~
            form_login: …
Run Code Online (Sandbox Code Playgroud)

php authentication symfony symfony-security

53
推荐指数
3
解决办法
3万
查看次数

Symfony 2.1中的功能测试中的身份验证

我目前正在将2.0.*项目迁移到Symfony的当前2.1 beta版.

在我的功能测试中,我目前使用此代码来创建具有身份验证的客户端:

$client = // create a normal test client
$role = 'ROLE_USER';
$firewallName = 'main';
$user = // pull a user from db

$client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie(session_name(), true));

$token = new UsernamePasswordToken($user, null, $firewallName, array($role));

self::$kernel->getContainer()->get('session')->set('_security_' . $firewallName, 
serialize($token));
Run Code Online (Sandbox Code Playgroud)

这在预期的2.0.*中有效,但在2.1中没有,数据没有在会话中设置.

有任何想法吗?

编辑(添加更多信息):

似乎问题出在方法" onKernelResponse " 中的文件" Symfony\Component\Security\Http\Firewall\ContextListener "中.有这个代码:

if ((null === $token = $this->context->getToken()) || ($token instanceof AnonymousToken)) {
    $session->remove('_security_'.$this->contextKey);
} else {
    $session->set('_security_'.$this->contextKey, serialize($token));
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下if"$ token instanceof AnonymousToken"是真的,因此会话密钥被删除.如果我注释掉那些代码,一切都按预期工作.

所以我想我的新问题是:我能做些什么来使令牌不是匿名的?

php symfony symfony-2.1

19
推荐指数
1
解决办法
5089
查看次数

手动验证用户

我尝试验证用户:

<?php 

/**
 * @Route("/testLogin", name="testLogin")
 */
public function testLoginAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $user = $em->getRepository('ApplicationDefaultBundle:User')->findOneBy(array('id' => 126));

    $providerKey = 'main';
    $token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());

    $this->container->get('security.context')->setToken($token);

    return $this->redirect($this->generateUrl('testCheck'));
}

/**
 * @Route("/testCheck", name="testCheck")
 */
public function testCheckAction()
{
    if (false === $this->get('security.context')->isGranted(
        'IS_AUTHENTICATED_REMEMBERED'
    )) {
        return new Response('Not logged');
    }
    $user = $this->container->get('security.context')->getToken()->getUser();

    return new Response($user->getUsername.' is logged');
}
Run Code Online (Sandbox Code Playgroud)

但我得到永久302重定向到/登录页面.

security:
    encoders:
        Application\Bundle\DefaultBundle\Entity\User:
            algorithm:   sha512
            iterations: 24
            encode_as_base64: true

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SPECIALIST:  ROLE_USER
        ROLE_EMPLOYER:    ROLE_USER …
Run Code Online (Sandbox Code Playgroud)

symfony

13
推荐指数
1
解决办法
2万
查看次数

如何在Symfony2功能测试中使用经过身份验证的用户?

我使用它FacebookBundle来验证我的Symfony2应用程序中的用户.但是,我想用phpunit创建功能测试,该测试使用经过身份验证的用户.

此外,我不想使用facebook用户,而是使用一个用户.

有人知道如何实现这个吗?

php phpunit symfony

11
推荐指数
1
解决办法
6801
查看次数

如何通过伪造登录来测试Symfony 2中的ACL

我正在开发构建在Symfony 2上的Web应用程序的一部分.与许多应用程序一样,需要身份验证和授权.如何通过传递或伪造登录来继续开发,考虑ACL?

在文档中,login_check身份验证和会话是否透明.我想我可能需要实现它的版本或以某种方式将其称为以不同的用户/角色登录

php authentication symfony

10
推荐指数
1
解决办法
3899
查看次数