我刚开始使用fosuserbundle,今天我激活确认注册链接.它工作得很好,但如果用户第二次点击电子邮件中的确认链接,他会收到该错误:
具有确认令牌"3hiqollkisg0s4ck4w8g0gw4soc0wwoo8ko084o4ww4sss8o4"的用户不存在404 Not Found - NotFoundHttpException
我认为这个错误应该由捆绑处理,不是吗?
谢谢
我的用户标记为'active',如果设置为零或null,我将不允许登录.
我已经尝试了几种方法并且做得很短.
如果我执行注销路由,则不会保留Flash消息,因此用户什么也看不到.
我考虑在登录表单上添加验证,以便在标志未设置为true时抛出正常的表单错误,但在该文件夹(vendor/Bundles/FOS/UserBundle/Form/Type)中我找不到任何登录信息形式,只有注册等,所以我不知道在哪里放或继承从哪里来覆盖.
我也按照这里的建议尝试手动注销,但这给我留下了死亡的白屏......
有什么建议如何轻松完成这个?
************** UPDATE ************
我意识到我可能想在登录表单上添加验证器.我目前已将其编码到用户被发送到的第一条路线的控制器中,但如果用户在登录前键入路线,则不会提供太多安全性,因为在成功登录尝试后,我的默认"登陆页面"之后登录将不是用户被带到的路线,但他将登陆他选择的路线...
***再次更新****
所以服务配置文件有这个......
<service id="security.user_checker" class="%security.user_checker.class%" public="false" />
Run Code Online (Sandbox Code Playgroud)
这个参数在这里定义......
<parameter key="security.user_checker.class">Symfony\Component\Security\Core\User\UserChecker</parameter>
Run Code Online (Sandbox Code Playgroud)
所以为了修改我需要覆盖的登录逻辑
Symfony\Component\Security\Core\User\UserChecker
Run Code Online (Sandbox Code Playgroud)
现在我通过覆盖symfony app/config中我自己的parameters.ini上面的参数来完成这个
security.user_checker.class = BizTV\UserBundle\Controller\UserChecker
Run Code Online (Sandbox Code Playgroud)
..并将此检查添加到我的userChecker overrider ...
//Test for companylock...
if ( !$user->getCompany()->getActive() ) {
throw new LockedException('The company of this user is locked.', $user);
}
Run Code Online (Sandbox Code Playgroud)
这是整个文件:
<?php
/*
* This file is part of the Symfony package.
* …Run Code Online (Sandbox Code Playgroud) 我正在使用FOSUserBundle处理symfony应用程序.如果我没有经过身份验证,我希望在菜单栏中有一个下拉登录表单,它具有与/ login下的完全不同的样式.
我收到'无效的CSRF令牌'.我是symfony2的完全新手,所以也许我犯了一个明显的错误,但我找不到谷歌搜索的解决方案.这是我试过的:
控制器:
<?php
namespace RoiRodriguez\CustomUserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\SecurityContext;
class DefaultController extends Controller {
/**
* Para requests internos, renderiza la barra de navegación.
* No tiene ruta.
*/
public function navigationAction() {
$params = array (
'csrf_token' => '',
'last_username' => ''
);
if ($this->container->get ( 'security.context' )->isGranted ( 'IS_AUTHENTICATED_FULLY' )) {
$session = $this->getRequest ()->getSession ();
$params ['last_username'] = (null === $session) ? '' : $session->get ( SecurityContext::LAST_USERNAME );
$params ['csrf_token'] = $this->container->get ( …Run Code Online (Sandbox Code Playgroud) 我正在尝试为用户请求密码时发送的电子邮件定义我自己的模板,但在添加HTML部分时它不起作用.
这是模板:
{% trans_default_domain 'FOSUserBundle' %}
{% block subject %}
{% autoescape false %}
{{ 'resetting.email.subject'|trans({'%username%': user.username, '%confirmationUrl%': confirmationUrl}) }}
{% endautoescape %}
{% endblock %}
{% block body_text %}
{% autoescape false %}
{{ 'resetting.email.message'|trans({'%username%': user.username, '%confirmationUrl%': confirmationUrl}) }}
{% endautoescape %}
{% endblock %}
{% block body_html %}
{% autoescape false %}
<div dir="ltr" style="display: block; width: 100%; background: #ffffff">
<table style='width: 100%; border: none'>
<tr style='height: 20px; background-color: #5A82FF'>
<td></td>
</tr>
<tr>
<td style="padding: 30px 0; font-family: …Run Code Online (Sandbox Code Playgroud) 我有一个例外:
An exception has been thrown during the rendering of a template ("The block type
sonata.user.block.menu does not exist") in SonataUserBundle:Profile:action.html.twig at
line 27.
Run Code Online (Sandbox Code Playgroud)
我已经安装了一个FOSUserBundle + SonataAdminBundle,我的理解,我需要tu安装SonataBlockBundle和其他必需的捆绑包.
我的内核文件:
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Ibw\JobeetBundle\IbwJobeetBundle(),
new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
new Sonata\CoreBundle\SonataCoreBundle(),
new FM\BbcodeBundle\FMBbcodeBundle(),
new FOS\UserBundle\FOSUserBundle(),
new Sonata\jQueryBundle\SonatajQueryBundle(),
new Sonata\AdminBundle\SonataAdminBundle(),
new Sonata\BlockBundle\SonataBlockBundle(),
new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(),
new Application\Sonata\UserBundle\ApplicationSonataUserBundle(),
Run Code Online (Sandbox Code Playgroud)
Adn my composer.json
"php": ">=5.3.3",
"symfony/symfony": "~2.4",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": …Run Code Online (Sandbox Code Playgroud) symfony fosuserbundle composer-php sonata-admin sonata-user-bundle
我想禁止访问/login,/register如果客户的IP地址被禁止.
被禁止的IP的(黑色)列表存储在数据库中.
我怎么解决这个问题?
我经历了很多stackoveflow问题和文章,但找不到合适的答案.
我正在使用fosuserbundle,hwiouthbundle和lexikjwt bundle.
我正在开发一个基于symfony的api,它将由Android应用程序和角度应用程序使用.
现在我需要注册和登录系统fosuserbundle facebook登录hwiouthbundle和api保护lexikjwt捆绑.
我已经实现了fosuserbundle和hwiouthbundke,两者都没有编写用户控制器.但我需要休息而不是形式.但我无法输入:在路由器中休息.
现在我如何登录,用fosuserbundle注册用户休息?我不想使用fosouth服务器.只需要注册和登录api而不是从网上休息.
正如标题所示,我将使用Facebook,Google和GitHub身份验证以及JWT身份验证器(LexikJWT).
在开始之前,我想知道如何使用它们?是否可以使用它们来保护API?
如果是,我的安全性应该具有哪种配置?假设我正在使用默认配置.
这是当前的security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
acl:
connection: default
access_decision_manager:
strategy: affirmative
role_hierarchy:
ROLE_SALES_NOTIFICATIONS: [ ROLE_SALES_NOTIFICATIONS ]
# FULL CONTROL
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
# Disabling the security for the web debug toolbar, the profiler and Assetic.
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
# -> custom firewall for the admin area of the URL
admin:
pattern: /admin(.*)
context: user
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null …Run Code Online (Sandbox Code Playgroud) symfony oauth-2.0 fosuserbundle hwioauthbundle lexikjwtauthbundle
我正在使用FOSUserBundle,我需要能够从2个不同的路由(或更多)登录.这些路线将具有不同的模板,并且还会登录到不同的区域.登录之间唯一不同的是所需的权限.路线将是符合的路线
site.com/login
site.com/admin/login
还有可能是site.com/ajax_login
我已经能够通过从FOSUserBundle login.html.twig(被覆盖)中删除除CSRF令牌之外的所有内容,然后创建呈现自己的登录框和登录路径的路由,来研究如何获取不同的模板. (这样只会渲染CSRF令牌).这不适用于admin/login,因为表单会回发登录,如果失败则会显示该页面.
有没有简单的方法来实现这一目标?
我遇到了关于FOSUserBundle最重要的可能性的无数问题,并且在使用Twig的继承机制时发现了一些"设计不连贯",我想澄清一下,因为它在某些项目中真的令人不安......
从我读过的内容来看,我们应该如何覆盖模板.比方说,登录模板(Security/login.html.twig).首先,我需要覆盖全局FOSUser布局(layout.html.twig').
全球FOSUser布局
{% extends "::layout.html.twig" %}
{% block title %}Page title{% endblock title %}
{% block body %}
<div id="container">
{% block fos_user_content %}{% endblock %}
</div>
{% endblock body %}
Run Code Online (Sandbox Code Playgroud)
在title和body块到HTML引用<title>和<body>标签(全球).现在,谈到登录本身,这就是我写的内容.
登录表格
{% extends "MyUserBundle::layout.html.twig" %}
{% block fos_user_content %}
{% if error %}
<div class="error">{{ error|trans({}, 'FOSUserBundle') }}</div>
{% endif %}
<form action="{{ path("fos_user_security_check") }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<label …Run Code Online (Sandbox Code Playgroud) fosuserbundle ×10
symfony ×8
forms ×2
php ×2
composer-php ×1
flash ×1
logout ×1
oauth-2.0 ×1
overriding ×1
sonata-admin ×1
symfony-2.2 ×1
symfony-2.3 ×1