0
symfony2에서 수동으로 보안 예제를 기반으로 로그인을 구현하려고하지만 잘못된 것이 있거나 오류나 메시지가 전혀 표시되지 않습니다./routing.yml수동 기반 symfony2 로그인
wn_home:
pattern: /secured
defaults: { _controller: WNHomeBundle:Home:index }
wn_users_homepage:
pattern: /hello/{name}
defaults: { _controller: WNUsersBundle:Default:index }
wn_users_register:
pattern: /register
defaults: { _controller: WNUsersBundle:Register:register }
wn_users_login:
pattern: /login
defaults: { _controller: WNUsersBundle:Security:login }
login_check:
pattern: /login_check
이것은 security.yml입니다
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
WN\Bundle\UsersBundle\Entity\User: sha256
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
users:
entity: { class: WNUsersBundle:User }
firewalls:
login:
pattern: ^/login
security: false
secured_area:
pattern: ^/secured
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout
target: /login
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
그리고이
이것은 번들/구성 :
<?php
namespace WN\Bundle\UsersBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use WN\Bundle\UsersBundle\Entity\User;
use WN\Bundle\UsersBundle\Entity\UsersRepository;
class SecurityController extends Controller {
public function loginAction() {
$request = $this->getRequest();
$session = $request->getSession();
if($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR))
{
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
}
else
{
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render('WNUsersBundle:Security:login.html.twig',
array('last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
));
}
}
?>
업데이트 :이 컨트롤러 login.html.twig입니다.
{% extends '::base.html.twig' %}
{% block content %}
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="Username">Username</label>
<input type="text" name="_username" id="username" value="{{ last_username }}">
<label for="Password">Password</label>
<input type="password" name="_password" id="password">
<br />
<input type="submit" name="submit" value="Login">
</form>
{% endblock %}
바로 지금 오류가 있습니다 : 경로 "/ login_check"에 대한 컨트롤러를 찾을 수 없습니다. 라우팅 구성에 일치하는 경로를 추가하는 것을 잊었을 수 있습니까?
이 문제를 해결하는 방법을 아는 사람이 있습니까?
이것은 분명하지 않습니다. 당신은 무엇을하려고합니까, 당신은 무엇을 기대합니까? 당신이 얻는 것과 어떻게 다른가요? – cheesemacfly
login.i를 테스트하려고하는데 username과 password를 넣는 로그인 폼이 있습니다. 예를 들어, 필드를 비워두면 뷰를 볼 수 있습니다. {% if error %}
$ request-> attributes-> has (SecurityContext :: AUTHENTICATION_ERROR) - false이고 $ session-> get (SecurityContext :: AUTHENTICATION_ERROR)이 null입니다. – paul