Symfony 2 FOS 用户捆绑包 Bootstrap 模式 AJAX 登录

2024-04-18

有没有人已经使用 Symfony 2 和 FOS User Bundle 在 Bootstrap 模式中构建了登录表单?

这是我现在所拥有的:

src/Webibli/UserBundle/Resources/config/service.yml

authentication_handler:
    class:        Webibli\UserBundle\Handler\AuthenticationHandler
    arguments:    [@router, @security.context, @fos_user.user_manager, @service_container]

应用程序/配置/security.yml

form_login:
    provider: fos_userbundle
    success_handler: authentication_handler
    failure_handler: authentication_handler

src/Webibli/UserBundle/Handler/AuthenticationHandler.php

<?php

namespace Webibli\UserBundle\Handler;

use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\Security\Core\Exception\AuthenticationException;


class AuthenticationHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface
{

    protected $router;
    protected $security;
    protected $userManager;
    protected $service_container;

    public function __construct(RouterInterface $router, SecurityContext $security, $userManager, $service_container)
    {
        $this->router = $router;
        $this->security = $security;
        $this->userManager = $userManager;
        $this->service_container = $service_container;

    }
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) {
        if ($request->isXmlHttpRequest()) {
            $result = array('success' => true);
            $response = new Response(json_encode($result));
            $response->headers->set('Content-Type', 'application/json');
            return $response;
        }
        else {
            // Create a flash message with the authentication error message
            $request->getSession()->getFlashBag()->set('error', $exception->getMessage());
            $url = $this->router->generate('fos_user_security_login');

            return new RedirectResponse($url);
        }

        return new RedirectResponse($this->router->generate('anag_new')); 
    } 
    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) {

        if ($request->isXmlHttpRequest()) {
            $result = array('success' => false, 'message' => $exception->getMessage());
            $response = new Response(json_encode($result));
            $response->headers->set('Content-Type', 'application/json');
            return $response;
        }
        return new Response();
    }
}

这是我正在加载到 Bootstrap 模式中的 Twig 视图:

{% extends 'UserBundle::layout.html.twig' %}
{% trans_default_domain 'FOSUserBundle' %}
{% block user_content %}
<script>
    $('#_submit').click(function(e){
        e.preventDefault();
        $.ajax({
            type        : $('form').attr( 'method' ),
            url         : $('form').attr( 'action' ),
            data        : $('form').serialize(),
            success     : function(data, status, object) {
                console.log( status );
                console.log( object.responseText );
            }
    });
});
</script>
<div class="modal-dialog">
    <div class="modal-content">
        <form action="{{ path("fos_user_security_check") }}" method="post" role="form" data-async data-target="#rating-modal" class="text-left">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title">{{ 'layout.login'|trans }}</h4>
        </div>
        <div class="modal-body">
            {% if error %}
                <div>{{ error|trans }}</div>
            {% endif %}
            <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
            <div class="form-group container">
                <label for="email">{{ 'security.login.username_email'|trans }}</label>
                <input type="text" class="form-control" id="username" name="_username" value="{{ last_username }}" required="required" placeholder="[email protected] /cdn-cgi/l/email-protection">
            </div>
            <div class="form-group container">
                <label for="password">{{ 'security.login.password'|trans }}</label><br />
                <input type="password" id="password" name="_password" required="required" class="form-control" placeholder="********">
            </div>
            <div class="form-group container">
                <label for="remember_me">
                    <input type="checkbox" id="remember_me" name="_remember_me" value="on" />
                    {{ 'security.login.remember_me'|trans }}
                </label>
            </div>
        </div>
        <div class="modal-footer">
          <input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans }}" class="btn btn-primary">
        </div>
    </form>
</div>
</div>
{% endblock %}

登录表单在没有 AJAX 的情况下工作得很好。如果出现问题,我只是想在模式中的表单上获取错误,或者如果登录成功则重定向用户。

谁能解释如何实现这一目标?


我已经找到了解决方案。这是我添加到我的 javascript 中的内容,

<script>
    $(document).ready(function(){
        $('#_submit').click(function(e){
            e.preventDefault();
            $.ajax({
                type        : $('form').attr( 'method' ),
                url         : '{{ path("fos_user_security_check") }}',
                data        : $('form').serialize(),
                dataType    : "json",
                success     : function(data, status, object) {
                    if(data.error) $('.error').html(data.message);
                },
                error: function(data, status, object){
                    console.log(data.message);
                }
            });
        });
    });
</script>

这是我的onAuthenticationFailure我的处理程序的方法,

public function onAuthenticationFailure(Request $request, AuthenticationException $exception) {
    $result = array(
        'success' => false, 
        'function' => 'onAuthenticationFailure', 
        'error' => true, 
        'message' => $this->translator->trans($exception->getMessage(), array(), 'FOSUserBundle')
    );
    $response = new Response(json_encode($result));
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}

我认为我的 Ajax 方法中的 URL 是错误的。谢谢您的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 2 FOS 用户捆绑包 Bootstrap 模式 AJAX 登录 的相关文章

  • 如何使用jquery $.post()方法提交表单值[重复]

    这个问题在这里已经有答案了 我有 1 个带有表单的主页和另一个用于处理表单值的页面 这是两个页面的源代码 表格页
  • 未找到类规范化器(在 PHP 5.3.8 中)

    我在尝试使用时收到此 PHP 错误Normalizer类 特别是Normalizer normalize功能 Fatal error Class Normalizer not found 我目前使用的是 PHP 5 3 8 因此 根据PHP
  • 如何在bootstrap中使用垂直对齐

    简单的问题 如何使用 bootstrap 在一个列内垂直对齐一个列 这里的例子 我想垂直对齐child1a和child1b http bootply com 73666 http bootply com 73666 HTML div cla
  • 使用 ajax 渲染部分视图

    我查过这个问题 https stackoverflow com questions 4888521 asp net mvc3 razor views and partialviews with ajax postbacks它解决了我最初的问
  • 高级自定义字段 – 具有多个输入的自定义字段类型

    我正在尝试为 ACF 创建一个新的字段类型 其中包含多个输入或存储值数组 原因是我希望为一组输入字段提供一些交互性和自定义布局 我按照这个教程http www advancedcustomfields com resources tutor
  • 使用 JavaScript 或 PHP 自动检测用户当前本地时间

    我经常需要根据用户的信息或受用户的影响来显示信息actual本地时间因时区而异 是否有可靠的方法来获取用户的当前时间和 或时区 关键的问题 服务器端代码基于网站主机或用户的ISP 客户端代码基于用户的系统时钟 太容易被操纵 关键问题 是否有
  • javascript单线程时onreadystatechange的调用者是谁?

    好吧 我是 javascript 的新手 听说它是单线程的 在我看来 如果您发出异步请求 它应该启动一个自己的线程来控制服务器是否已经响应 这在 JavaScript 中不起作用 我在想是否有一些内置机制可以保存所有侦听器并调用它们 具体取
  • 将 Mailjet API v3 包装器集成为 Codeigniter 库

    我怎样才能整合Mailjet API PHP 包装器 https github com mailjet mailjet apiv3 php no composer作为库安装到我的 Codeigniter 安装中 是不是把内容放进去那么简单存
  • jQuery 绑定 ajax:成功无法在 Rails 3 应用程序中为新创建的(ajax)项目工作

    编辑这篇文章是因为我发现问题实际上在于rails无法绑定到ajax success函数 使用导轨3 2 3 感谢您花时间阅读并尝试提供帮助 我在 ajax success 删除项目上添加一个简单的淡出功能 如下所示 document rea
  • PHP 未定义索引/未定义偏移解决方法[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 注意 未定义的变量 和 注意 未定义的索引 https stackoverflow com questions 4261133 php notice undefined variable an
  • Symfony 功能测试失败,但相同的请求在浏览器中有效

    我跟着Symfony 文档 http symfony com doc current book testing html functional tests关于功能测试 以便编写我的第一个测试 但我有一些问题 我通过浏览器得到的响应效果很好
  • 致命错误:发送表单时未找到“App\Http\Controllers\Input”类

    我正在尝试发送一封包含来自 Laravel 应用程序的表单的电子邮件 当你点击提交时 它会抛出上述错误 致命错误 找不到类 App Http Controllers Input 不知道为什么 因为我没有 也不知道我需要有一个输入控制器 或者
  • PHP 内部的连接分解

    我看到一篇关于连接分解的文章 场景 1 不好 Select from tag Join tag post ON tag post tag id tag id Join post ON tag post post id post id Whe
  • Bootstrap 与 Haml 和 Rails 一起崩溃

    我对 Rails 编程等很陌生 所以如果这是非常基本的 我很抱歉 我正在尝试让 twitter bootstrap crash js 在我的网络应用程序上工作 我试图遵循这里的结构http getbootstrap com javascri
  • pdo如何检查它是否是从数据库检索的第一条记录?

    sql3 SELECT member FROM levels where upline AND level 1 q3 conn gt prepare sql3 q3 gt execute array level2downlines whil
  • 不使用函数检测字符串结尾

    如何找出 PHP 字符串的结尾 我有一项任务 无需任何函数即可识别字符串长度 我知道 PHP 中的所有字符串都以空字节结尾 0 但我不知道最后一个符号之后的字符串元素 例如 这将不起作用 while a length 如何在不使用任何函数的
  • 通过页面打开 mysql 连接是完全鲁莽的吗?

    当查询数据库时 是否会感到极度偏执 每次必须完成新查询时 我都会打开和关闭 mysql 连接 我担心 尤其是启用 ajax 的页面 这会导致性能大幅下降 我应该继续使用此方法 还是至少在每个页面 而不是每个查询 中打开和关闭连接一次 顺便说
  • 无法使用mailer类在php中发送邮件

    今天我在php中做了一些邮件处理 我发现有两种方法 一种是Php提供的简单邮件功能 另一种是我在互联网上找到的关于使用网站上的PHP邮件程序类https github com PHPMailer PHPMailer https github
  • PHP保存图像文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 PHP URL 保存图像 https stackoverflow com questions 724391 saving image from php url using php 我有一个图像作为
  • Bootstrap 100% 宽度/全宽度

    我想用 Bootstrap 创建一个新网站 我需要它的宽度为 100 但我不希望它是流畅的 至少现在不是 我遇到的问题是 使用 bootstrap 标准将您限制为 960px 并且使用流体布局它是全宽的 但其行为就像流体布局应该通过在窗口尺

随机推荐

  • 将 pandas 列表数据框转换为数据框字典

    我有一个数据框 带有 DateTime 索引 其中一些列包含列表 每个列表有 6 个元素 In dframe head Out A B timestamp 2017 05 01 00 32 25 30 3512 375 1025 358 1
  • Windows 服务、阻塞收集和多线程问题

    我的场景 Windows 服务 NET 4 我轮询数据库中的实体 当新实体进来时 它们会被添加到BlockingCollection 在服务的OnStart我创建一个System Threading Tasks Task他的工作是枚举Blo
  • 为什么引用某些导出的 const 变量的某些 const 变量的值为 0?

    考虑以下 我有两个导出常量 如下所示 somefile h extern const double cMyConstDouble extern const double cMyConstDouble2 and somefile cpp co
  • IntelliJ IDEA - Eclipse .classpath 文件和相对位置?

    我想将 IntelliJ IDEA 与 Eclipse 项目一起使用 而不转换项目格式 我现在遇到的主要问题是在我的 classpath 文件中 我们有如下条目
  • Eclipse 中缺少“注释处理”菜单

    我用这个手册https github com excilys androidannotations wiki Eclipse Only Configuration https github com excilys androidannota
  • 如何将 IN 子句与 mysqli 准备好的语句一起使用[重复]

    这个问题在这里已经有答案了 我正在使用准备好的语句将一些旧代码移至新的 msqli 接口 但我在使用包含 IN 子句的 SQL 语句时遇到了问题 我通常会这样做 ids 123 535 345 567 878 sql SELECT FROM
  • “父框基线”的定义是什么?

    我无法理解以下摘录10 可视化格式化模型详细信息 W3C https www w3 org TR CSS2 visudet html 摘录 基线 将框的基线与父框的基线对齐 如果该框没有基线 请将下边距边缘与父级的基线对齐 在这种情况下 父
  • 具有 Flux 模式的中继缓存?

    我真的很想将 Relay 缓存合并到我的 Flux 存储中 这样我就可以进行 时间旅行 并深入了解应用程序 看起来中继存储和操作都是不可序列化的类 这很糟糕 但看起来我应该能够将缓存与网络请求分开并将缓存保存在 Flux 存储中 这听起来有
  • Vista/Win7 Delphi 音频设备信息

    有没有办法在 Vista 或 Win 7 上使用 delphi D2009 获取所有音频设备名称 我设法获取设备数量 并使用 IMMDevice 获取设备 PropertyStore 但我无法继续 多谢 ask the PropertySt
  • 如何在Dockerfile中下载并解压

    所以 我有 它有效 但我想改变立即下载文件并解压它的方式 Dockerfile FROM wordpress fpm Copying themes from local COPY wordpress var www html wp cont
  • Newtonsoft.Json 可在 Unity 编辑器中运行,但无法在移动设备上运行

    我正在 Unity 中编写一个按类别提问和回答的游戏 类别是通过返回 JSON 文本的 PHP 脚本获取的 当我在 UnityEditor 中使用此解决方案时 它可以正常工作 但是当我在移动设备上安装 apk 时 反序列化不起作用 与 my
  • 带圆角的方形进度条

    我正在尝试在 dart flutter 中构建一种圆形方形进度条 也许有人知道如何使其成为可能 我已经尝试了所有 油漆 边框等等 但没有成功 示例图像 圆形方形进度条 https i stack imgur com jhy9Q png 你可
  • 在 Python 中为现有 PDF 创建大纲/目录

    我正在使用 pyPdf 将多个 PDF 文件合并为一个 这很好用 但我还需要向生成的 PDF 文件添加目录 大纲 书签 pyPdf 似乎只支持读取大纲 Reportlab 允许我创建它们 但开源版本不支持加载 PDF 文件 因此无法向现有文
  • 一个本地 .resx 字符串可以引用另一个本地 .resx 字符串吗?

    我正在尝试确定是否可以将串联字符串添加到我的本地 resx 文件之一 这个例子应该澄清 假设我有一个简单的 ASP NET 网页 由 1 一个标签 其文本是重要关键字 2 一个带有必填字段验证的输入和 3 一个导致验证发生的按钮组成 lbl
  • JodaTime中如何获取本机的时区?

    如何检测本地计算机所在的时区 I tried DateTimeZone getDefault 但如果机器位于德国 那么这不会给我例如时区 德国 有可能吗 DateTimeZone getDefault 如果您的主机位于德国 将返回您的时区
  • 没有 jpa 的 Spring 和 Hibernate

    对于我的新项目 我计划使用 Hibernate 5 和 Spring 4 并且一如既往地喜欢分成不同的层 项目 梯度依赖 org springframework spring webmvc 4 2 1 RELEASE org springf
  • 获取.NET程序集的日期[重复]

    这个问题在这里已经有答案了 如何从当前 NET 程序集中检索创建日期 我想添加一些非常简单的功能 让我的应用程序在主程序集构建日期一周后停止工作 我已经编写了在给定日期后杀死我的应用程序的代码 我只需要以编程方式从程序集中检索创建日期 以下
  • 分析 mex 函数

    我刚刚用 c 将 Matlab 程序重写为 mex 函数以加快速度 并取得了出色的结果 这个优化决策是一个非常非常好的主意 无需线程即可将速度提高 20 倍 它仍然让我很好奇 mex 函数将时间花在什么上 并希望找出可能的瓶颈 我正在寻找一
  • 创建自定义表格表示的函数

    我使用下面的代码来概述我的部分数据 从以下代码中创建函数的最佳方法是什么 它将采用 dataList 以及一些图形选项 例如颜色 作为参数 并返回自定义的表格表示形式 如下所示 overviewtheData Text Grid Map R
  • Symfony 2 FOS 用户捆绑包 Bootstrap 模式 AJAX 登录

    有没有人已经使用 Symfony 2 和 FOS User Bundle 在 Bootstrap 模式中构建了登录表单 这是我现在所拥有的 src Webibli UserBundle Resources config service ym