晚上好,
我最近安装了symfony3,这意味着我创建了我的用户实体,加载了用户fixtures,在安全配置文件中设置了firewall / provider / form_login条目,以及实现了一个安全控制器来处理/ login路由。
我现在正试图使用嵌入SF的身份验证机制登录应用程序。
点击for r := (Request{}); r.err == nil; r.id++ {
r.line, r.err = input.ReadSlice(0x0a)
channel <- r
}
时,我会被重定向到/
,并且正在按预期呈现登录表单。但在通过post方法提交(到/login
)后,SF回复302并将我重定向回登录表单。
/login_check
路由吗?所以我预计会出现一些异常,但是没有一个例外。
在this thread中开悟是一个防火墙问题,但它没有帮助我。
我的安全配置文件:
/login_check
有人可以帮我指出我的安全配置有什么问题吗? (或其他任何事情......)
谢谢!
答案 0 :(得分:1)
使用Symfony 3.1.0-DEV
我可以保证你可以定义«/ login»&amp; «login_check»在SecurityController中作为注释路由。
唯一的要求是:
/login
网址,可以为此创建特殊防火墙/login_check
必须受到安全防火墙的保护所以这是我的配置
# app/config/routing.yml
app:
resource: "@AppBundle/Controller/"
type: annotation
# Security
logout:
path: /logout
我的security.conf
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
anonymous: ~
secured:
pattern: ^/
anonymous: false
provider: ent_provider
form_login:
login_path: login
check_path: login_check
logout:
path: /logout
target: /login
然后可以将login和login_check路由声明为注释,但只需在控制器内部实现loginAction(如文档中所述)
/**
* @Route("/login", name="login")
*/
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(
'AppBundle::security/login.html.twig',
array(
// last username entered by the user
'last_username' => $lastUsername,
'error' => $error
)
);
}
/**
* @Route("/login_check", name="login_check")
*/
public function loginCheckAction()
{
// this controller will not be executed,
// as the route is handled by the Security system
throw new \Exception('Which means that this Exception will not be raised anytime soon …');
}
我花了好几天试图找出这些问题,我希望这会为你们中的一些人节省时间,因为我:o
答案 1 :(得分:0)
SF无法完全处理/ login_check路由。您必须指定此路线:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmController al=new AlarmController(this);
al.StartAlarm();
}
如docs中所述。