2

我正在使用passport js来处理一些身份验证。但是,我也使用angular $route service来处理我在客户端的模板。因此,我不确定如何继续使用护照,因为doc页面上的示例假设服务器端模板。例如,如何使用护照js与客户端模板?

app.post('/login', 
    passport.authenticate('local', { 
     successRedirect: '/', 
     failureRedirect: '/login', 
     failureFlash: true 
    }) 
); 

所以在此基础上,它看起来像“/”和“/登录”是指以服务模板,不只是一个RESTful查询或某事的反应。我做事的方式,我的模板发生在客户端。在我的角度文件中设置好所有

$routeProvider 
    .when('/', { 
     templateUrl: 'templates/login.html', 
     controller: 'MainCtrl' 
    }) 
    .when('/home', { 
     templateUrl: 'templates/home.html', 
     controller: 'MainCtrl' 
    }); 

好像我试图混合和匹配,并没有真正理解做事情的两种方法。

所以我知道我可能已经窘况迄今为止措辞这一点,但我想要做的就是这样的事情

HTML(login.html的)

<h3> Login </h3> 
<form action= "login" method="post"> 
    Username:<br> 
    <input type="text" name="username" value=""> 
    <br> 
    Password:<br> 
    <input type="password" name="password" value=""> 
    <br><br> 
    <input type="submit" value="Submit"> 
</form> 

节点后端

我意识到我不认证任何东西,但这很多还没有为我工作

passport.use(new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

app.post('/login', 
    passport.authenticate('local', { 
     successRedirect: '/home', 
     failureRedirect: '/', 
     failureFlash: true 
    }) 
); 

所以我想使用护照进行身份验证,但使用客户端模板/路由来保持单页应用程序的感觉。

有人可以请指出我在正确的方向吗?或者告诉我,我所做的是完全错误的?

编辑:我跟我的代码得到的错误是

TypeError: undefined is not a function 

这可能是不够的,必须到任何你有用,但如果需要,我可以去更深入。具体的错误信息并不是我想要问的精神。

+0

浏览器给你的错误或者它发生在服务器端?该错误可能由于缺少参数而发生,您应该查看堆栈跟踪并确切指出发生的位置 – rocketspacer

回答

-1

对于JS,你需要包含这段代码在应用程序中使用的护照。JS

app.use(passport.initialize()); 
app.use(passport.session()); 

您的代码

passport.use(new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

没有地方你passport.authenticate

使用

passport.use('login', new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

叫一个名字即使是序列化和反序列化,你应该实现护照的序列化和反序列化方法

passport.serializeUser(function (user, done) { 
    done(null, user); 
}); 
passport.deserializeUser(function (id, done) { 
    done(null, id); 
}); 

`

在LocalStrategy返回

if (valid) { 
    return done(null, username); 
} else { 
    return done(null, false, {"message": "User not found."}); 
} 
1

您可以用什么护照调用自定义回调

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.status(401).end('wrong credentials'); } 

    //If you use session, skip if you dont 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.status(200).end('user authenticated' + user.username); //That, or hand them a session id or a JWT Token 
    }); 

    // If you don't use session just response directly to client 
    res.status(200).end(jwt.createToken(user)); 
    })(req, res, next); 
}); 

http://passportjs.org/docs/authenticate#custom-callback
所以,没有服务器端重定向在这里,所有的路由逻辑可以做到前端