OAuth2 не может вернуть токен аутентификации, используя функции simple-oauth2 и Firebase для аутентификации Spotify - PullRequest
0 голосов
/ 20 ноября 2018

Я работал над потоком oauth2 для spotify, следуя этому аналогичному руководству команды Firebase для Instagram ЗДЕСЬ

Я могу отправить свои учетные данные и вернуть код пользователя исостояние в URL, но когда я запускаю метод для отправки кода для возврата токена авторизации, токен аутентификации, который я печатаю на консоли в функциях Firebase, возвращает: Auth Token Error Not Found.Вот мой рабочий процесс:

Вот Документы Spotify

ПЕРВЫЙ, у меня есть функция для настройки моего spotifyOAuth:

function spotifyOAuth2Client() {
    // Spotify OAuth 2 setup
    const credentials = {
        client: {
            id: functions.config().spotify.clientid,
            secret: functions.config().spotify.clientsecret,
        },
        auth: {
            tokenHost: 'https://accounts.spotify.com',
            authorizePath: '/authorize'
        },
    };
    return require('simple-oauth2').create(credentials);
}

Я использую эту функциюв этой функции Firebase, которая вызывается с использованием https://us-central1-<my project string>.cloudfunctions.net/redirect:

exports.redirect = functions.https.onRequest((req, res) => {
    const oauth2 = spotifyOAuth2Client();

    cookieParser()(req, res, () => {
        const state = req.cookies.state || crypto.randomBytes(20).toString('hex');
        console.log('Setting verification state:', state);
        res.cookie('state', state.toString(), {
            maxAge: 3600000,
            secure: true,
            httpOnly: true,
        });
        const redirectUri = oauth2.authorizationCode.authorizeURL({
            redirect_uri: OAUTH_REDIRECT_URI,
            //scope: OAUTH_SCOPES,
            state: state,
        });
        console.log('Redirecting to:', redirectUri);
        res.redirect(redirectUri);
    });
});

Приведенный выше код возвращает строку URL с правильными параметрами, в следующем блоке кода происходит разрыв кода, у меня есть другая облачная функция, которая запускаетсяпосле перенаправления с res.redirect(redirectUri) выше.И когда я пытаюсь запустить метод getToken(), кажется, что он ничего не возвращает, потому что вместо этого я нажал на блок catch?Здесь я наблюдаю Auth Token Error Not Found.

const oauth2 = spotifyOAuth2Client();

    try {
        return cookieParser()(req, res, async () => {
            console.log('Received verification state:', req.cookies.state);
            console.log('Received state:', req.query.state);
            if (!req.cookies.state) {
                throw new Error('State cookie not set or expired. Maybe you took too long to authorize. Please try again.');
            } else if (req.cookies.state !== req.query.state) {
                throw new Error('State validation failed');
            }
            console.log('Received auth code:', req.query.code);
            console.log(OAUTH_REDIRECT_URI);

            // Get the access token object (the authorization code is given from the previous step).
            const tokenConfig = {
                code: req.query.code,
                redirect_uri: 'http://localhost:8100/popup'
            };

            // Save the access token
            try {
                const result = await oauth2.authorizationCode.getToken(tokenConfig)
                const accessToken = oauth2.accessToken.create(result);
                console.log('inside try');
                console.log(result);
                console.log(accessToken);
            } catch (error) {
                console.log('Access Token Error', error.message);
            }

Я дважды проверил свои учетные данные клиента / секретного секретного файла в конфигурации, что не так с этим потоком OAuth2?

1 Ответ

0 голосов
/ 20 ноября 2018

Решил мою проблему, я не использовал правильные конечные точки:

const credentials = {
    client: {
        id: functions.config().spotify.clientid,
        secret: functions.config().spotify.clientsecret,
    },
    auth: {
        tokenHost: 'https://accounts.spotify.com',
        authorizePath: '/authorize',
        tokenPath: '/api/token'
    },
};
...