2016-10-20 4 views
1

Я пытаюсь создать аутентификацию в symfony3, но не работаю. У меня нет ошибок, и в dev bar у меня есть Logged in as anon. Моя сущность:Аутентификация в symfony3

<?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> 

Я не понимаю, где проблема. Когда я отправляю форму, у меня нет ошибок, если пользователь существует или что-то еще.

+0

Прежде всего, учитывая эту конфигурацию, ваша компании должна реализовать UserInterface, и ваш репозиторий (не показан здесь) должен реализовать UserProviderInterface. Пожалуйста, внимательно ознакомьтесь с статьей поваренной книги: http://symfony.com/doc/current/security/entity_provider.html. Кроме того, до тех пор, пока вы не получите доступ к ресурсу, который требует полной проверки подлинности, учитывая эту конфигурацию, разрешена анонимная аутентификация (и ваш логин не будет запущен). – Gerry

ответ

0

В разделе безопасности попробуйте добавить информацию 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 } 

Надеется, что это поможет