Passport.js 不适用于手动表单数据发布请求角度

2024-03-19

我已经以角度创建了一个表单,单击“提交”按钮后,我正在发送一个发布请求Content-Type带值的标头application/x-www-form-urlencoded.

onSubmit(user:User) {
    let headers = new Headers();
    // to send data as form data as passport library want it as a form data
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    return this.http.post('/login', user, { headers: headers }).subscribe((data) => {
      console.log("Data : ", data);
    });
} 

并且模型用户的类型为

// Class to bind user data
class User {
  constructor(private name: string, private password: string) {
  }
}

这是服务器端代码

 let userList: User[] = [new User(1, "Sunil"), new User(2, "Sukhi")];

        let app = express();

        // passport library
        let passport = require('passport');
        let LocalStrategy = require('passport-local').Strategy;

        // middlewares
        app.use(express.static("public"));
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({ extended: false }));
        app.use(session({ resave: false, saveUninitialized: true, secret: "secretKey123!!" }));

        // passport middleware invoked on every request to ensure session contains passport.user object
        app.use(passport.initialize());

        // load seriliazed session user object to req.user 
        app.use(passport.session());

        // Only during the authentication to specify what user information should be stored in the session.
        passport.serializeUser(function (user, done) {
            console.log("Serializer : ", user)
            done(null, user.userId);
        });

        // Invoked on every request by passport.session
        passport.deserializeUser(function (userId, done) {
            let user = userList.filter(user => userId === user.userId);
            console.log("D-serializer : ", user);
            // only pass if user exist in the session
            if (user.length) {
                done(null, user[0]);
            }
        });
// passport strategy : Only invoked on the route which uses the passport.authenticate middleware.
        passport.use(new LocalStrategy({
            usernameField: 'name',
            passwordField: 'password'
        },
            function (username, password, done) {
                console.log("Strategy : Authenticating if user is valid  :", username)
                let user = userList.filter(user => username === user.userName);
                console.log("Valid user : ",user)
                if (!user) {
                    return done(null, false, { message: 'Incorrect username.' });
                }
                return done(null, user[0]);
            }
));

app.post('/login', passport.authenticate('local', {
     successRedirect: '/done',
     failureRedirect: '/login'
}));
app.get('/done', function (req, res) {
     console.log("Done")
     res.send(req.session)
})


app.get('/login', function (req, res) {
     console.log("login")
     res.send("login")
})

但每次它返回登录


就我而言,问题在于请求正文。我直接发送用户对象,所以这不起作用。为了解决这个问题,我使用创建了 body 对象URLSearchParams.

let  body = new URLSearchParams();
body.append('name', this.user.name);
body.append('password', this.user.password); 

这里是onSubmit method

onSubmit() {
    let  body = new URLSearchParams();
    body.append('name', this.user.name);
    body.append('password', this.user.password);

    let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
    let options = new RequestOptions({headers});

    this.http.post("/services/login", body.toString(), options).subscribe((response)=>{
        let arrUrl = response.url.split("/");
        let url = "/" + arrUrl[arrUrl.length-1];
        this.router.navigate([url]);
    });
}

其次,从登录表单中,我没有传递以下值:password场地。因此本地策略的回调(带有用户名和密码)没有被调用。

如果您不传递任何字段,则回调方法将不会被调用,并将重定向到failureRedirect URL.

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

Passport.js 不适用于手动表单数据发布请求角度 的相关文章

  • Angular2更改检测“表达式在检查后已更改”

    我在 Angular2 最终版本 中遇到了有关组件之间的更改检测和数据流的问题 我已经解决了这个问题 但对我来说似乎有点老套 所以想知道是否有更好的方法 基本上我有一个组件 A 它有一个子组件 B 还有 ngFor 创建多个子组件 C 对于
  • node_modules 显示为空,您可能需要运行 `npm install`

    我从 git 克隆了一个 Angular 4 项目 当我转到项目的根文件夹并执行时ng serve 我收到以下错误 node modules appears empty you may need to run npm install 我该如
  • 在运行量角器测试时进行 API 调用

    我已经使用构建了一个网络应用程序angular2 0 and typescript 现在我正在写E2E为我的网站使用protractor 现在 在我的一项测试中 我需要进行 API 调用 HTTP GET 请求 并使用响应值作为测试用例中的
  • 在 ionic 中从 Base64 打开 pdf

    因此 我将 Jasper 报告转换为 pdf 然后在 REST 控制器中转换为 base64 我该如何将其传输到我的 ionic 3 应用程序 我研究了 Ionic Native Document Viewer 但为了做到这一点 我需要将文
  • 不支持函数调用。考虑用对导出函数的引用替换函数或 lambda

    我在我的应用程序中使用 APP INITIALIZER 并在 app module ts 中将其设置如下 并进行必要的导入 NgModule providers ContextService provide APP INITIALIZER
  • 将 Angular 项目从 StackBlitz 导出到本地

    我想导出在 StackBlitz 中完成的 Angular 项目 并使用以下命令从 Angular CLI 执行它ng serve就像我们对在本地计算机中创建的 Angular 项目所做的那样 去做就对了 这是您需要点击的地方
  • html 文件上传的默认文件夹和文件名

    我正在使用 jQuery Ajax 插件将图像文件从本地计算机上传到网络服务器 该网页呈现一个标记为Upload Image File 用户按下按钮并从浏览器显示的弹出目录列表中选择要上传的文件 服务器上的 PHP 存储图像文件 一切正常
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • 如何在 Angular2 中实现间隔/轮询以与量角器一起使用?

    我有一个 angular2 应用程序 我想用量角器进行测试 在此应用程序中 我有一个带有图表的页面 该页面正在使用自动生成的数据定期更新 显然 Protractor 的一项功能是在执行测试代码之前等待脚本和 http 调用完成 但是 如果有
  • 使用 AngularFire 从 Firestore 过滤数据

    我正在尝试使用 Angularfire 的查询集合从 Firestore 过滤数据 https github com angular angularfire2 blob master docs firestore querying coll
  • Rails simple_form:自定义输入id

    我想把用Rails simple form生成的几个表单放在一页上 并用javascript对它们进行操作 然而 simple form 为表单中的各个输入生成了相同的 id 因此我想用我自己的 id 替换生成的 id 现在我有一行 和 H
  • 垫子图标不显示图标

    我喜欢有角度的材料的设计 但使用它可能会很痛苦 该网站展示了一个使用的示例
  • 如果我不使用超时,Angular 2 焦点将不起作用

    正如您所看到的 如果我打算集中输入 我将使用 setTimeout 如果我删除 setTimeout 焦点不起作用 div div
  • Angular 2 路由器使用 Observable 进行解析

    Angular 2 RC 5 发布后引入了路由器解析 Here https angular io docs ts latest guide router html resolve guard使用 Promise 演示了示例 如果我使用 Ob
  • 一个表单包含两个提交按钮,每个按钮都有不同的操作

    我花了几个小时试图找到问题的解决方案 但似乎找不到正确的解决方案 提前感谢你的帮助 我有一个 html 表单
  • mat-tab-group 不是 Angular 9 中的已知元素

    我正在使用 Angular 9 和 Angular Material 9 2 4 我正在尝试使用mat tab 组在我的 component html 中 但我不断收到错误 mat tab group is not a known elem
  • Webpack 在 Angular 的 ng 服务中的作用

    我是 Angular 的新手 想知道当我们为应用程序提供服务时 Webpack 在幕后扮演什么角色 在最初的印象中 我开始知道 webpack 是一个构建和打包工具 它将所有必需的 JS 文件分组到单独的包中 然而 我无法找到 webpac
  • Angular 6 Asp.Net(非 Core)Web Api CORS 请求失败

    我正在构建一个 Net Web Api 它将由 Angular 6 客户端使用 但出于某种原因 我无法使其在我的开发环境中工作 我从一个非常简单的 Web Api 开始 它只返回一个字符串 用于前端和后端测试目的之间的通信 GET api
  • 表单提交后 Django 重定向不起作用

    Django 新手 所以这个可能有一个非常简单的答案 但我一生都找不到具体的解决方案 我只是想在使用 FileField 提交表单后重定向到新的 URL 我可以单独导航到该 URL 效果很好 文件上传正确 因此我知道它已正确验证 但重定向返
  • http.put 请求在 Angular2 中执行两次

    我正在尝试更新从我的 Angular2 应用程序调用 API 的公司记录 我在调试时注意到 http 调用被执行了两次 我找到了另一个堆栈溢出线程 https stackoverflow com questions 37241294 ang

随机推荐

  • 定制 Linux GUI:从哪里开始? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我长期以来一直对开发适合我的需求和兴趣的操作系统用户界面感兴趣 当我年轻的时候 我疯狂地使用 Windows 的 Stardock 换
  • 我们什么时候应该实现 Serialized 接口?

    public class Contact implements Serializable private String name private String email public String getName return name
  • 从网页中删除所有 HTML 标签

    我正在做一些 BASH shell 脚本curl 如果我的curl 命令返回任何文本 我就知道有错误 此文本返回者curl通常是 HTML 格式 我想如果我可以去掉所有 HTML 标签 我就可以将生成的文本显示为错误消息 我在想这样的事情
  • NPM 卸载包不起作用

    有人可以帮助我确定卸载 npm 软件包时我的 cli 代码有什么问题吗 当我运行此 cli 代码 如下图所示 时 npm 不会卸载软件包 而是将其添加到我的 node modules 中 我希望这个社区中的某个人可以解决我的问题 并为我带来
  • libgmp-10.dll 丢失

    我最近在我的 64 位 Windows 7 计算机上安装了 MinGW 当我尝试编译最基本的 C 程序时 例如 include
  • 使用 MSBuild 时不会构建私有访问器

    我的构建服务器使用 MSBuild 来构建我的应用程序 我们的单元测试需要访问一些私有成员进行测试 因此我们使用内置的私有访问器 Visual Studio 没有问题 但是当我们将代码推送到构建服务器时 我们收到错误 MyTest cs 9
  • 从数组中删除非唯一行

    我有一个数组a如下 a 1 2 3 4 1 2 我想删除在中多次出现的所有行a并得到c c 3 4 请注意 这与保留唯一行不同 因为我根本不希望出现重复行 我怎样才能做到这一点 第三个输出为unique https www mathwork
  • 重新编译CHM文件

    我正在编写一个脚本 该脚本应该能够向 chm file 反编译后使用hh exe decompile outputFolder fileName chm命令 我得到 html 文件和其他 2 个文件 hhc and hhk扩大 编辑 htm
  • Android -fragmentTransaction.replace() 不适用于支持库 25.1.0

    我使用片段替换 FrameLayoutfragmentTransaction replace Layout
  • SQL Server 表与索引的同义词

    我在 SQL Server 2005 的单个实例上有多个数据库 我在一个数据库上创建了一个同义词来访问另一个数据库上的表 并且在编写查询时 我想使用特定的索引 但是 在评估执行计划 它似乎没有使用它 如果我编写查询来显式访问数据库 它可以工
  • Flask-login:如果login_manager的session_protection设置为“strong”,请记住我不工作

    我正在使用 Flask login 将会话管理集成到我的 Flask 应用程序中 但是如果我设置了 记住我 功能就不起作用会话保护 to strong 但是 如果设置为 它绝对可以正常工作basic 用户加载器 login manager
  • 我可以在 cpp 中使用带有向量的嵌套循环吗?

    我有一个 cpp 问题 我不知道出了什么问题 也许你可以帮助我 我正在尝试实现图表的数据结构 在此图中 我将连接一些具有较小欧氏距离的节点 但在第二次迭代时 我的迭代器将指向 0x0 仅当我将这两个节点的距离给出到 std cout 时 才
  • dotnetopenid 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 非常基本的问题 但是有人可以给我指点有关如何实现和使用 dotnet openid 的建设性教程吗 我正在努力寻找任何真正的文档来解释如何
  • 无法连接到 gmail smtp linode django apache2 设置

    您好 我在连接到 google smtp 服务器时遇到困难 上下文是 每当用户填写表单时 我的程序都会自动通过电子邮件将反馈发送到我的 Gmail 帐户 除了程序卡在 send mail 函数中之外 一切正常 我尝试这样做 telnet s
  • 如何使用 Java 8 流 API 以 O(N) 时间和 O(C) 空间复杂度从列表中仅删除一个最大值(最小值)

    以下代码用于从列表中仅删除一个最大值 在本例中为第一个值 但这无关紧要 这是O n 及时和O n 在空间中 超出输入 public List
  • PHP Nginx error_log 被截断

    我正在运行 nginx 和 PHP 5 5 以及我的所有error log当传递的字符串很长时 消息会被截断 我已经更新了我的php ini文件并将日志最大长度从 1024 增加到 0 无最大值 但这种情况仍在发生 如果您希望日志行长度超过
  • 如何在 Python 中进行 F 检验来比较嵌套线性模型?

    我想比较两个嵌套线性模型 将它们称为 m01 和 m02 其中 m01 是简化模型 m02 是完整模型 我想做一个简单的 F 检验 看看完整模型是否比简化模型增加了显着的效用 这在 R 中非常简单 例如 mtcars lt read csv
  • 如果图像太小,使用 PHP 调整图像大小

    我允许用户上传 如果图像太小 我想放大它们 低质量不是问题 我需要将最小边变为 150px 并放大其他尺寸以保持纵横比 我需要让它适用于 jpg gif 和 png 文件 任何指示将不胜感激 我正在努力寻找有关使图像变得更大的任何东西 正如
  • 删除已终止用户提出的会议请求

    需要一次从多个终止用户的所有会议室中删除终止用户发出的会议请求 下面是我构建的脚本 用于从所有会议室中删除两个已终止用户的会议请求 我用了OR如果我想删除两个已终止用户的会议 种类 来自 sasi 或 Kalai 的日历 请使用运算符 如何
  • Passport.js 不适用于手动表单数据发布请求角度

    我已经以角度创建了一个表单 单击 提交 按钮后 我正在发送一个发布请求Content Type带值的标头application x www form urlencoded onSubmit user User let headers new