2

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

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

因此,基于此,“/”和“/login”似乎是为了提供模板,而不仅仅是对 RESTful 查询或其他东西的响应。我做事的方式,我的模板发生在客户端。在我设置一切的角度文件中

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

似乎我正在尝试混搭,并没有真正理解任何一种做事方法。

所以我知道到目前为止我可能已经用可怕的措辞来表达,但我想做的是这样的

html (登录.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

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

4

2 回答 2

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

于 2016-10-07T09:48:14.437 回答
-2

要使用护照 js,您需要在 app.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."});
}
于 2015-12-06T07:32:03.633 回答