使用护照注册后阻止用户身份验证

时间:2015-12-07 23:55:54

标签: node.js express routes passport.js

我已经使用passport和express.js建立了登录/注册界面和机制。我遇到的问题是,在用户注册后,我们被重定向到登录页面,但我们最终可以更改URL并立即在用户配置文件中输入,但这当然不是预期和想要的。我希望用户在注册后未经过身份验证,并且在进入其个人资料之前需要在登录页面中手动输入他/她的凭据。

Public Sub SumByMonWithArray()
    Dim startRowA As Long, startRowB As Long
    Dim finalRowA As Long, finalRowB As Long
    Dim strA As String, strB As String
    Dim m() As Variant
    Dim dt As Variant
    Dim r As Long, c As Long
    Dim i As Long, j As Long

    'Define the start and end rows of each sheet
    startRowA = 2
    startRowB = 2
    finalRowA = Sheet3.Cells(Sheet3.Rows.Count, "A").End(xlUp).Row
    finalRowB = Sheet1.Cells(Sheet1.Rows.Count, "N").End(xlUp).Row

    'Dimension your array
    r = finalRowA - startRowA + 1
    If r < 1 Then Exit Sub 'exit if there's no data
    ReDim m(1 To r, 1 To 12)

    For i = startRowA To finalRowA

        Debug.Print "In loop i=" & CStr(i) 'shows progress (delete after testing)
        strA = Trim(CStr(Sheet3.Cells(i, "A").Value2))

        'If test value isn't blank run the comparison
        If strA <> "" Then

            r = i - startRowA + 1

            For j = startRowB To finalRowB

                Debug.Print "In subloop i=" & CStr(i) & ", j=" & CStr(j) 'shows progress (delete after testing)

                strB = Trim(CStr(Sheet1.Cells(j, "N").Value2))

                'If there's a match aggregate the month array
                If strB <> "" And strA = strB Then
                    'Populate a Variant with cell value and check it's a date
                    dt = Sheet1.Cells(j, "T").Value
                    If IsDate(dt) Then
                        c = Month(dt) 'Gets the column index of the array
                        m(r, c) = m(r, c) + CDbl(Sheet1.Cells(j, "S").Value2)
                    End If
                End If

            Next

        End If

    Next

    'Write the aggregate array to Sheet 3
    With Sheet3
        .Cells(startRowA, "B").Resize(UBound(m, 1), UBound(m, 2)).Value = m
        .Activate
        .Range("A1").Select
    End With
    Application.ScreenUpdating = True

End Sub

并且router.get('/', isAuthenticated, function(req, res) { res.render('library', { // passing the id of and username the connecting user to the dust userid: req.user._id, username: req.user.userName }); }); router.get('/library', isAuthenticated, function(req, res) { res.render('library', { // passing the id of and username the connecting user to the dust userid: req.user._id, username: req.user.userName }); }); /* GET login page. */ router.get('/login', function(req, res) { // Display the Login page with any flash message, if any res.render('login', { message: req.flash('message') }); }); /* Handle Login POST password.authenticate is used to delegate the authentication to the login strategy when a HTTP POST is made to /login. */ router.post('/login', passport.authenticate('login', { successRedirect: '/library', failureRedirect: '/', failureFlash: true })); /* GET Registration Page */ router.get('/signup', function(req, res) { res.render('signup', { message: req.flash('message') }); }); /* Handle Registration POST password.authenticate is used to delegate the authentication to the signup strategy when a HTTP POST is made to /signup. */ router.post('/signup', passport.authenticate('signup', { successRedirect: '/login', failureRedirect: '/signup', failureFlash: true })); 函数/中间件定义如下

isAuthenticated

我做错了什么?

基本上,在注册后,我有一个重定向到var isAuthenticated = function(req, res, next) { // if user is authenticated in the session, call the next() to call the next request handler // Passport adds this method to request object. A middleware is allowed to add properties to // request and response objects if (req.isAuthenticated()) { return next(); } else { res.redirect('/login'); } } 的按钮,如果我们被重定向到/(就像它发生在我身上),那么用户应该已经过身份验证了,但我不要这个......

1 个答案:

答案 0 :(得分:3)

至少有两种解决方案:

  1. session: false添加到您传递给passport.authenticate('signup', {...})的配置对象,如passportjs documentation中所述。

  2. 请勿使用护照进行注册。护照的主要用例是验证(和建立会话),DIY注册逻辑或多或少只是从signup护照中间件复制代码。