Как войти в систему с помощью linkedin в приложении, где мобильные и nodejs используются вместе - PullRequest
0 голосов
/ 30 мая 2019

Не могу создать сеанс сервера в мобильных запросах.

Я занимаюсь разработкой мобильного приложения.Войдите в LinkedIn, чтобы приложение делалось только с мобильного.

Я написал остальные API с помощью nodejs.Я использовал паспорт для регистрации логина. Затем я проверил его в браузере. В браузере он работал гладко.

Когда я делаю запрос к моей конечной точке (/ auth / linkedin), он перенаправляет на linkedin и вводит данные моей учетной записи и разрешает приложению. Он снова перенаправляется на конечную точку обратного вызова (auth / linkedin / callback).Я возвращаю информацию о вошедшем в систему пользователе при успешном входе в систему.Я делаю обработку этой сессии информации по следующим запросам.

Но когда я захожу с мобильного, информация пользователя распечатывается через веб-просмотр, и я не могу создать сеанс. Как я могу решить эту проблему.Что я делаю не так?

Я младший.если вы видите мой код неверно, пожалуйста, укажите для улучшения моего навыка.

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);
});
...