如何在将Mobile和Node.js结合使用的应用程序中使用linkedin登录

时间:2019-05-29 21:21:32

标签: android node.js oauth-2.0 passport.js passport-linkedin

我无法在移动请求中创建服务器会话。

我正在开发移动应用程序。使用LinkedIn登录仅通过移动设备制作的应用程序。

我用nodejs编写了其余的api。我用通行证登录了护照,然后从浏览器进行了测试,在浏览器上可以正常使用。

当我向端点(/ auth / linkedin)发出请求时,它将重定向到linkedin并输入我的帐户信息并允许该应用程序。它将再次重定向到回调端点(auth / linkedin /回调)。如果成功登录,我将返回已登录用户的信息。我正在处理下一个请求的会话信息。

但是当我从移动设备登录时,用户信息被打印为Webview,并且无法创建会话。我该如何解决此问题。我在做什么错了?

我是大三。如果您发现我的代码错误,请指定以提高我的技能。

app.js

const AuthController = require("./router/Auth");

app.use(express.json());
app.use(session({
  secret:'secretkey',
  saveUninitialized: false,
  resave: true,
  cookie: {maxAge: 365*24*60*60*1000}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use('/auth',AuthController);

passport.use(new LinkedInStrategy({
    clientID: config.linkedin.clientID,
    clientSecret: config.linkedin.clientSecret,
    callbackURL: config.baseUrl[env] + "/auth/linkedin/callback",
    scope: config.linkedin.scope
  },
  function(accessToken, refreshToken, profile, done) {
    User.findOne({'linkedin.id' : profile.id}, function(err, user) {
      if (err) return done(err);
      if (user) return done(null, user);
      else {
        // if there is no user found with that linkedin id, create them
        var newUser = new User();

        // set all of the linkedin information in our user model
        newUser.linkedin.id = profile.id;
        newUser.linkedin.token = accessToken;
        newUser.name  = profile.displayName;

        if (typeof profile.emails != 'undefined' && profile.emails.length > 0)
          newUser.email = profile.emails[0].value;

        if(typeof profile.photos != 'undefined' && profile.photos.length> 0)
          newUser.photo = profile.photos[0]

        // save our user to the database
        newUser.save()
        .then(createWallet)
        .then(updateWallet)
        .then(user => {
          return done(null,user)
        })
        .catch(err =>{
          throw err;
        });
      }
    });
  }
));

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

passport.deserializeUser(function(id, done) {
    User.getUserById(id, function(err, user) {
      done(err, user);
    });
  });
app.listen(PORT,()=>{
    console.log("Listening...",PORT);
});

function createWallet (user){
  const userId  = user.id;
  return new Promise((resolve,reject) => {
      request(config.blockChain['url']+'/?type=register&userID='+userId,{json:true} ,(err,res,body)=>{
          if(err) reject(err);
          user.wallet = {
            "secret":body.secret,
            "publicKey":body.publicKey
          }
          resolve(user);
      })
  }
  )

}

function updateWallet(user){

return user.save();
}

Auth.js

router.get('/linkedin', passport.authenticate('linkedin'));
router.get('/linkedin/callback', 
passport.authenticate('linkedin',{ failureRedirect: '/'}),(req,res)=>{
    const user = req.user;
    response = {
        status:true,
        msg:"Login is successfull",
        data: user
    }
    res.status(200).json(response);
});

0 个答案:

没有答案