【问题标题】:Authentication in symfony3symfony3 中的身份验证
【发布时间】:2016-10-20 08:51:56
【问题描述】:

我尝试在 symfony3 中创建身份验证但不起作用。我没有错误,在开发栏中我有Logged in as anon。我的实体:

<?php

namespace App\DesktopBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Member
*
* @ORM\Table(name="member")
* @ORM\Entity(repositoryClass="App\DesktopBundle\Repository   \MemberRepository")
*/
class Member
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=255)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set nickname
 *
 * @param string username
 *
 * @return Member
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set email
 *
 * @param string $email
 *
 * @return Member
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

/**
 * Get email
 *
 * @return string
 */
public function getEmail()
{
    return $this->email;
}

/**
 * Set password
 *
 * @param string $password
 *
 * @return Member
 */
public function setPassword($password)
{
    $this->password = $password;

    return $this;
}

/**
 * Get password
 *
 * @return string
 */
public function getPassword()
{
    return $this->password;
}
}

我的路由文件:

app_desktop_homepage:
path:     /
defaults: { _controller: AppDesktopBundle:Default:index }
login:
path:   /login
defaults: { _controller: AppDesktopBundle:Member:login }

我的控制器:

namespace App\DesktopBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class MemberController extends Controller{


public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');

    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('AppDesktopBundle:Header:disconnected.html.twig', array(
        'last_username' => $lastUsername,
        'error'         => $error,
    ));
  }
}

我的安全文件:

security:
hide_user_not_found: false
encoders:
    AppDesktopBundle\Entity\Member:
        algorithm: bcrypt

# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
    our_db_provider:
        entity:
            class: AppDesktopBundle:Member
            property: username

firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        provider: our_db_provider
        form_login:
            login_path: login
            check_path: login
            csrf_token_generator: security.csrf.token_manager
            username_parameter: _username
            password_parameter: _password
        logout: true
        anonymous: true

我的模板:

<form action="{{ path('login') }}" method="post">
                    <div class="form-group">
                        <input type="text" name="_username"  placeholder="User name" class="form-control">
                    </div>
                    <div class="form-group">
                        <input type="password" name="_password" placeholder="Password" class="form-control">
                    </div>
                    <div class="loginbox">
                        <button class="btn signin-btn" type="submit">LOGIN</button>
                    </div>
                </form>

我不明白问题出在哪里。当我提交表单时,如果用户存在或其他什么,我没有错误。

【问题讨论】:

  • 首先,给定这个配置,你的实体需要实现UserInterface,你的repository(这里没有展示)需要实现UserProviderInterface。请仔细阅读食谱文章:symfony.com/doc/current/security/entity_provider.html。此外,只要您不访问需要完全身份验证的资源,鉴于此配置允许匿名身份验证(并且不会触发您的登录)。

标签: symfony symfony-forms


【解决方案1】:

在安全部分尝试添加access_control 信息作为示例:

security.yml

access_control:
    # URL which need to be available to anonymous users
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }

希望有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 2017-07-17
    • 2015-02-02
    • 2018-02-24
    • 2015-04-29
    • 2010-10-05
    • 2013-10-30
    • 1970-01-01
    相关资源
    最近更新 更多