首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Node - Passport Auth - Authed Post Route在表单提交时挂起

Node - Passport Auth - Authed Post Route在表单提交时挂起
EN

Stack Overflow用户
提问于 2013-07-24 17:19:17
回答 2查看 1.5K关注 0票数 5

这是一个奇怪的问题。Im Passport的‘本地策略’为我的express应用程序,我遇到了一个奇怪的问题。

从本质上讲,我有三条路线。每一个都有一个身份验证检查。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.get('/admin', authenticatedOrNot, adminRoute.index);
app.get('/admin/new', authenticatedOrNot, adminRoute.newpost);
app.post('/admin/new', authenticatedOrNot, adminRoute.create);

authenticatedOrNot方法很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var authenticatedOrNot = function(req, res, next){
    if(req.isAuthenticated()){
        next();
    }else{
        res.redirect("/login");
    }
}

非常适合登录到管理区域,并检查用户是否已登录,但当我向“/ admin /new”Post路径提交表单时,浏览器挂起。控制台中什么都不会发生,即使console.log已经就位:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.create = function(req, res){
    console.log(req);
        // Database logic here
        res.redirect('/admin');
}

我好像不能让它工作。它只是挂起,并最终失败。浏览器控制台只是在网络请求中显示'pending‘。

我已经尝试从post路由中删除'authenticatedOrNot‘方法,但如果我将所有三个都删除,它工作得很好。

我被难住了。

有帮手吗?还有别的人碰到这个吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-03 16:27:30

我有一个与此非常相似的问题,所以我把这篇文章贴出来,以防它能有所帮助。问题似乎是我在passport函数中有另一个函数定义,这阻止了done处理程序被调用。我认为这就是问题所在,因为当我更改函数参数名称时,它就开始工作了。

事后看来,我认为错误是显而易见的,但由于我是第一次接触node,我对函数、回调、闭包等仍然有点不确定。我也有这样的印象,即节点约定总是使用这些参数名称(err、done、next),并且与它们相关的有一些魔力。我想不是这样的。在这一点上,请随时教我。

无论如何,我使用的是从教程(在http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local)复制的passport本地策略。本教程使用的是mongo,但我决定切换到postgresql。因此,我使用了来自https://github.com/brianc/node-postgres-pure的pg.js模块,并使用了提供的示例代码。

在我最初将pg.js示例代码复制并粘贴到passport教程之后,下面是代码的相关部分:

//错误代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
passport.use('local', new LocalStrategy({
    // by default, local strategy uses username and password, we will override with email
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true // allows us to pass back the entire request to the callback
},
function(req, email, password, done) { 
    pg.connect(configDB.connectionString, function(err, client, done) {
        if (err) {
            return console.error('could not connect to postgres', err);
        }
        client.query('select email, password_hash from admin_user where email = $1', [email], function(err, result) {

            // check password against db, and then try to call passports done callback
            return done(null, userModel); // this actually invokes the pg.connect done callback

        });
    });
}));

因此,当这段代码运行时,在返回/login的post中,对done的调用将调用passport done,而不是pg.connect done。

//好吗?工作代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function(req, email, password, done) { 

    pg.connect(configDB.connectionString, function(err, client, connect_done) {
        if (err) {
            return console.error('could not connect to postgres', err);
        }
        client.query('select email, password_hash from admin_user where email = $1', [email], function(err, result) {
            connect_done() // free up postgres connection, which I should have been doing before
            // check password against db, and then
            return done(null, userModel); // invoke passport's done callback

        });
    });
}));

这段代码现在可以为我工作了(除非我错误地复制了一些东西)。

票数 1
EN

Stack Overflow用户

发布于 2014-03-03 06:59:31

当你拆分得越来越多时,诊断这样的麻烦变得容易得多.最好的方法是使用一些嗅探器(内置在Chrome、Firefox、Opera或独立浏览器中),并准确地获取您发送到服务器的头文件。这非常有用,因为您可以将问题定位到前端应用程序(例如,<form acton="/admin/new"错误类型)或后端。

让我们向您道歉,您的标题没有问题,并且您在/admin/new路由上准确地发送了POST。由于您的console.log( req );不会生效,因此应用程序显然不会到这一步。这可能是因为authenticatedOrNot挂起或因为adminRoute.create未正确实例化。

正如我所见,authenticatedOrNot可能会挂起/login重定向,因为您没有提供如何处理此路由的方法。

adminRoute.create可能会带来一些麻烦,这取决于你将它附加到你的应用程序中的方式。

因此,在简历中,我需要看到更多你的代码来建立麻烦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17840762

复制
相关文章
使用代码为textview设置drawableLeft
xml中的textView中设置android:drawableLeft: <TextView          android:id="@+id/bookTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/checkmark" android:gravity="center_
欢醉
2018/01/22
8790
代码中修改TextView的DrawableLeft图片
先把解决代码贴上来: Drawable weather = getResources().getDrawable(R.drawable.sunday); weather.setBounds(0, 0, weather.getMinimumWidth(), weather.getMinimumWidth()); tv_choose_weather.setCompoundDrawables(weather, null, null, null); /***********分割线*
张拭心 shixinzhang
2022/11/30
7970
在代码中设置drawableLeft
在xml中使用android:drawableLeft="@drawable/payicon_type";
yuanyuan
2019/09/10
2.6K0
Android TextView 属性大全
Android 中我们知道有一个使用频率非常高的控件,它就是 TextView,但是它的属性特别多,今天我们就来探究下,它都有哪些属性。
程序员飞飞
2020/05/11
2.7K0
一文学会所有 Android TextView 属性,妈妈再也不担心我的代码写不好了!
Android 中我们知道有一个使用频率非常高的控件,它就是 TextView,但是它的属性特别多,今天我们就来探究下,它都有哪些属性。
程序员飞飞
2022/01/11
1.9K0
[HTML5] Canvas绘制简单形状
使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画
唯一Chat
2019/09/10
1.1K0
[HTML5] Canvas绘制简单形状
textview设置字体大小-设置textview字体样式
  一些字体基础的设置,都可以的textview设置字体大小,但是我们能满足吗?不能,所以继续
宜轩
2022/12/26
3.1K0
常用控件之Button详解
小伙伴们肯定都有在玩儿一些游戏,比如和平精英,在界面上展示的名字,其实就是Android中咱们上一篇介绍到的TextView控件。而今天,我们再给大家带来一个非常好玩儿的控件,这个控件可以结合咱们之前的讲到的内容做很多有趣的事情~
下码看花
2019/09/02
1.4K0
常用控件之Button详解
腾讯开源超实用的UI轮子库,我是轮子搬运工
只需要修改一份配置表就可以调整 App 的全局样式,包括组件颜色、导航栏、对话框、列表等。一处修改,全局生效。
Android技术干货分享
2019/06/22
4.9K0
TextView属性和方法大全
前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的UI界面基本组件。 一、认识TextView 我们知道前面学习的HelloWorld应用程序中就是使用
分享达人秀
2018/02/02
2.1K0
TextView属性和方法大全
Origin绘制上面和右边边框
如下面两个图,是绘制前后的对比图,可以发现多了上面和右边的边框,且边框无刻度。
全栈程序员站长
2022/08/31
1.2K0
Origin绘制上面和右边边框
BottomSheet底部动作条使用
底部动作条 底部动作条(Bottom Sheets)是一个从屏幕底部边缘向上滑出的一个面板,使用这种方式向用户呈现一组功能。底部动作条呈现了简单、清晰、无需额外解释的一组操作。 使用环境 底部动作条(Bottom Sheets)特别适合有三个或者三个以上的操作需要提供给用户选择、并且不需要对操作有额外解释的情景。如果只有两个或者更少的操作,或者需要详加描述的,可以考虑使用菜单(Menu)或者对话框替代。 底部动作条(Bottom Sheets)可以是列表样式的也可以是宫格样式的。宫格布局可以增加视觉的清晰
xiangzhihong
2018/02/05
1.9K0
BottomSheet底部动作条使用
OpenGL 学习系列---基本形状的绘制
在之前的一篇博客中,讲述了 OpenGL 基础绘制流程 及相关的代码,其中关于 OpenGL 程序编译部分都是可以在其他项目中接着复用的,接下来会讲到如何去绘制其他的基本图元。
音视频开发进阶
2019/07/25
1.9K0
Android开发笔记(三十七)按钮类控件
Button是文本按钮(继承自TextView),而ImageButton是图像按钮(继承自ImageView)。两者之间的区别在于: 1、Button即可显示文本也可显示图形(通过设置背景图),而ImageButton只能显示图形不能显示文本; 2、Button可在文本周围区域显示小图,而ImageButton无法在某个区域显示小图; 3、ImageButton上的图像可按比例进行拉伸,而Button上的大图会拉伸变形(因为背景图无法按比例拉伸); 从上面可以看出,Button的适应面更广,所以实际开发中基本使用Button。 Button与ImageButton的单击方法是setOnClickListener,对应的监听器要实现接口View.OnClickListener。长按方法是setOnLongClickListener,对应的监听器要实现接口View.OnLongClickListener。下面是Button按键监听器的代码例子:
aqi00
2019/01/18
1.6K0
OpenCV之绘制几何形状
python代码: import cv2 as cv import numpy as np image = np.zeros((512, 512, 3), dtype=np.uint8) cv.rectangle(image, (100, 100), (300, 300), (255, 0, 0), 2, cv.LINE_8, 0) cv.circle(image, (256, 256), 50, (0, 0, 255), 2, cv.LINE_8, 0) cv.ellipse(image, (256,
MachineLP
2021/07/19
5140
android常用布局详解「建议收藏」
在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。Android中有很多种View和ViewGroup,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。
全栈程序员站长
2022/09/05
2.1K0
android常用布局详解「建议收藏」
网站顶部设置灯笼
自定义CSS .deng-box { position: fixed; top: -40px; right: -20px; z-index: 999; } .deng-box1 { position: fixed; top: -30px; right: 30px; z-index: 999; } .deng-box2 { position: fixed; top: -30px; left: 30px; z-i
院长技术
2021/02/19
8960
给WordPress博客添加返回顶部和底部的教程
今天就给大家分享下返回顶部那块的制作教程,其实也不难,主要是用到html、css和一些jq代码。
小狐狸说事
2022/11/17
5400
给WordPress博客添加返回顶部和底部的教程
点击加载更多

相似问题

缓存或核心数据的半持久化图像和视频?

12

将byte[]持久化到图像数据库字段

11

将NSCountedSet持久化到NSUserDefaults

11

将ExpandoObject持久化到MongoDB

31

将文件持久化到App

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文