GET-запрос Axios к серверу узла никогда не возвращает зарегистрированного пользователя, посещая тот же маршрут вручную в браузере - PullRequest
0 голосов
/ 10 июня 2019

У меня сервер узла, работающий на localhost:8000, который выплевывает зарегистрированного в данный момент пользователя на /user.Теперь в моем интерфейсе на localhost:8001 я бы хотел получить этого пользователя.

Если я вручную перехожу на localhost:8000/user в моем браузере , я получаю обратно пользователя, если явошел в систему. Всякий раз, когда я вышел из системы, возвращается пустая строка.Пока все хорошо.

Однако: всякий раз, когда я отправляю запрос на localhost:8000/user из моего внешнего интерфейса , я получаю пустую строку.Так что это работает (я не получаю никаких ошибок, и код состояния 200), но кажется, что мой интерфейс не знает , что я вошел в систему / мой бэкэнд не понимает, что яя вошел в систему.

Фронтенд

axios.get("localhost:8000/user").then(res => {
    console.log(res)
  }) //this works, but always behaves like there is no current 
     //user i.e. that I am logged-out

Backend

//imports here, then:    
passport.use(
  new Auth0Strategy(
    {
      domain: "bla.eu.auth0.com",
      clientID: "afjgnrtkngewmofmwlefmlwems",
      clientSecret:
        "jngnsknkankjangkjangjknKJJKGKAHBJVvgjvVgjVbhJBjhbJbj",
      callbackURL: "http://localhost:8000/callback",
      audience: "https://bla.eu.auth0.com/userinfo",
      responseType: "code",
      scope: "openid email profile",
    },
    function(accessToken, refreshToken, extraParam, profile, done) {
      return done(null, profile)
    }
  )
)

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

passport.deserializeUser(function(user, done) {
  done(null, user)
})

const app = express()
app.use(cors({ origin: "http://localhost:8001" }))

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))

app.use(
  session({ secret: "secret_key", resave: true, saveUninitialized: true })
)

app.use(passport.initialize())
app.use(passport.session())

app.use(function(req, res, next) {
  res.locals.loggeedIn = false
  if (req.session.passport && typeof req.session.passport.user !== undefined) {
    res.locals.loggedIn = true
  }
  next()
})

app.get("/", function(req, res, next) {
  res.send("Root")
})

app.get(
  "/login",
  passport.authenticate(
    "auth0",
    {
      domain: "bla.auth0.com",
      clientID: "kafmkafmkamfkamfka",
      redirectUri: "http://localhost:8000/callback",
      audience: "https://bla.auth0.com/userinfo",
      responseType: "code",
      scope: "openid email profile",
    },
    function(req, res, next) {
      res.redirect("/")
    }
  )
)

app.get("/logout", function(req, res, next) {
  req.logout()
  res.redirect("/")
})

app.get(
  "/callback",
  passport.authenticate("auth0", {
    failureRedirect: "/failure",
  }),
  function(req, res) {
    res.redirect("/user")
  }
)

app.get("/user", function(req, res, next) {
  res.send(req.user)
})

app.get("/failure", function(req, res, next) {
  res.send("Failure")
})

app.listen(8000, function() {
  console.log("running")
})

Есть что-то, чего я здесь не получаю?Посещаете ли вы браузер в localhost:8000/user и делаете ли вы запрос axios `` localhost: 8000 / user` не то же самое?

1 Ответ

1 голос
/ 10 июня 2019

Axios по умолчанию не отправляет куки. Вы должны установить включение файлов cookie для сеансов, установив для параметра withCredentials значение true.

axios.get("localhost:8000/user", { withCredentials: true } ).then(res => {
    console.log(res)
  }) 
...