簡體   English   中英

如何在 next.js API 中使用護照?

[英]How to use passport with next.js API?

我正在嘗試將passport-spotify與next.js 的頁面/api(您使用export default (req, res)... )一起使用,但我無法將其重定向到Spotify 的授權頁面。 這是我的pages/api/spotify.js代碼:

var passport = require('passport');
const SpotifyStrategy = require('passport-spotify').Strategy;

passport.use(
  new SpotifyStrategy(
    {
      clientID: clientid,
      clientSecret: clientsecret,
      callbackURL: 'http://localhost:3000/auth/spotify/callback'
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({ spotifyId: profile.id }, function(err, user) {
        return done(err, user);
      });
    }
  )
);

export default (req, res, next) => {
    passport.authenticate('spotify', {
        scope: ['user-read-email', 'user-read-private'],
        showDialog: true
      }),
    res.end()
}

我試過用 express 來測試它,它在那里工作。 這是我的代碼:

const express = require('express')
const app = express()
const port = 8000
var passport = require('passport');
const SpotifyStrategy = require('passport-spotify').Strategy;

passport.use(
  new SpotifyStrategy(
    {
      clientID: clientid,
      clientSecret: clientsecret,
      callbackURL: 'http://localhost:3000/api/callback'
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({ spotifyId: profile.id }, function(err, user) {
        return done(err, user);
      });
    }
  )
);
app.get(
    '/auth/spotify',
    passport.authenticate('spotify', {
      scope: ['user-top-read'],
      showDialog: true
    }),
    function(req, res) {
      // The request will be redirected to spotify for authentication, so this
      // function will not be called.
    }
  );

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

有沒有辦法讓 Next.js 與 Passport 一起工作?

我知道了! 我使用了next-connect 這是一個帶有passport-spotify和next.js的Spotify身份驗證請求示例:

// pages/api/spotify.js
import nc from 'next-connect';
var passport = require('passport');
const SpotifyStrategy = require('passport-spotify').Strategy;

passport.use(
  new SpotifyStrategy(
    {
      clientID: clientid,
      clientSecret: clientsecret,
      callbackURL: 'http://localhost:3000/api/callback'
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({ spotifyId: profile.id }, function(err, user) {
        return done(err, user);
      })
    }
  ))

const handler = nc()
  .get(passport.authenticate('spotify', {
    scope: ['user-top-read']
  }), (req, res) => {
  })

export default handler;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM