1
symfony3で認証を作成しようとしましたが、動作しません。私はエラーがなく、devバーには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>
問題の原因はわかりません。フォームを提出すると、ユーザーが存在するか何か他のものがあればエラーは発生しません。一例として、access_control情報を追加したセキュリティセクショントライで
この構成与えられたすべてのまず、あなたのエンティティは、する必要がありますUserInterfaceを実装し、リポジトリ(ここには示していません)はUserProviderInterfaceを実装する必要があります。クッキングブックの記事http://symfony.com/doc/current/security/entity_provider.htmlを徹底的に見てください。また、完全な認証が必要なリソースにアクセスしない限り、この設定を使用すると匿名認証が許可されているため、ログインは実行されません。 – Gerry