使用Node.js / Passport验证Android用户

时间:2015-07-24 18:59:22

标签: java android node.js passport.js httpurlconnection

我制作了一个使用PassportJS对用户进行身份验证的网络应用,现在我想为同一个项目制作Android应用。要登录用户,我使用HttpURLConnection向登录路由发出了POST请求,但我不知道如何处理Passport中的重定向,我无法获得req.user JSON。

我打电话的路线:

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

Passport登录

passport.use('local-login', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
},
function(req, email, password, done) {
    User.findOne({ 'local.email' :  email }, function(err, user) {
        if (err) {
            return done(err);
        }
        if (!user) {
            return done(null, false, req.flash("message", "Email not found"));
        }
        if (!user.validPassword(password)) {
            return done(null, false, req.flash("message", "Incorrect password"));
        }
        console.log("Logged in!")
        return done(null, user);
    });
}));

Android代码呼叫路由

HttpURLConnection con = null;
try {
     String urlParameters = "email=someemail@gmail.com&password=somepassword";
     String request = "http://10.0.2.2:3000/login";
     URL url = new URL(request);
     con = (HttpURLConnection) url.openConnection();

     con.setDoOutput( true );
     con.setRequestMethod( "POST" );
     con.setInstanceFollowRedirects( false );

     OutputStream out = con.getOutputStream();
     out.write(urlParameters.getBytes());
     out.flush();
     out.close();

     String cookie = con.getHeaderField("Set-Cookie");
     con = (HttpURLConnection) new URL("http://10.0.2.2:3000/").openConnection();
     con.setRequestProperty("Cookie", cookie);
     con.connect();
   } catch (Exception e) {
      e.printStackTrace();
   }

上面的代码打印出“已登录!”在终端我运行localhost:3000,但我无法获得req.user,它总是重定向到“/”作为非登录用户。有关如何获取req.user并让用户登录Android应用程序的任何建议将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

验证和Android应用的最佳方式是

  1. 使用Google Signin for Android对Android应用中的用户进行身份验证。链接:https://developers.google.com/identity/sign-in/android/start

  2. 上面的Google SignIn会生成一个Google ID令牌。应将google ID令牌发送到您的服务器。服务器可以使用此ID获取用户详细信息。您可以在https://developers.google.com/identity/sign-in/android/backend-auth

  3. 上阅读更多内容

    但是,可以使用策略passport-google-token实现此部分。

    创建路由和策略以验证服务器上的令牌,并从android调用API将access_token作为变量传递。

    希望这有助于节省您的时间。