我制作了一个使用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应用程序的任何建议将非常感激。提前谢谢!
答案 0 :(得分:0)
验证和Android应用的最佳方式是
使用Google Signin for Android对Android应用中的用户进行身份验证。链接:https://developers.google.com/identity/sign-in/android/start
上面的Google SignIn会生成一个Google ID令牌。应将google ID令牌发送到您的服务器。服务器可以使用此ID获取用户详细信息。您可以在https://developers.google.com/identity/sign-in/android/backend-auth
但是,可以使用策略passport-google-token实现此部分。
创建路由和策略以验证服务器上的令牌,并从android调用API将access_token作为变量传递。
希望这有助于节省您的时间。