如何使用带有客户端模板的护照js?

时间:2015-12-04 02:54:38

标签: angularjs node.js authentication passport.js client-side-templating

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

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

这可能不足以对你们任何人有用,但如果需要我可以更深入。具体的错误信息并不是我想要问的精神。

2 个答案:

答案 0 :(得分:1)

您可以使用Passport调用自定义回调

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
所以,这里没有服务器端重定向,所有路由逻辑都可以在前端完成

答案 1 :(得分:-2)

使用护照js时,您需要在app.js中包含这段代码

exit()

您的代码

// add #include <cstdlib> at the beginning of your code to use exit()

{
bool error_found = false;
printf("\nEnter number of Processes:");
if(scanf("%d", &n)!=1 || n<0)error_found = true;
else
{
    for(i=0;i<n;i++)


    {
        printf("\nEnter Process ID %d :",i+1);
        if(scanf("%d", &process[i])!=1 || process[i]<0){error_found = true; break;}
        printf("\nEnter Process Time %d:",i+1);
        if(scanf("%d",&ptime[i])!=1 || ptime[i]<0){error_found = true; break;}
    }
}
if (error_found) {
    // some error exists
    puts("MUST NOT ALPHABET OR NEGATIVE NUMBER!");
    exit(1);
}

没有您在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

`

在LocalStrategy中返回

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