Приложения Node.js с хостингом Firebase для запуска Javascript Steam API - PullRequest
0 голосов
/ 25 августа 2018

Мне нужно, чтобы пользователь зашел на мой сайт, используя Steam (в качестве поставщика Open ID).
В настоящее время я использую приведенный ниже код для запуска API с использованием сервера localhost, но у меня возникли проблемы при использовании его с firebase. Я не уверен, как изменить localhost на сервер Firebase Поскольку я реализовал код, используя функцию firebase, а также использовал хостинг Но я не смог получить желаемый результат.

const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
credential: firebase.credential.cert('steam.json'),
databaseURL: 'https://xyz.firebaseio.com' //Firebase URL
});
var app = express();


app.use(session({
store: new FirebaseStore({
  database: ref.database()
}),
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));

var OpenIDStrategy = require('passport-openid').Strategy;
var SteamStrategy = new OpenIDStrategy({
    // OpenID provider configuration
    providerURL: 'http://steamcommunity.com/openid',
    stateless: true,
    // How the OpenID provider should return the client to us
    returnURL: 'http://localhost:4000/auth/openid/return',
    realm: 'http://localhost:4000/',
},
function(identifier, done) {
    process.nextTick(function () {
        var user = {
            identifier: identifier,
            steamId: identifier.match(/\d+$/)[0]
        };
        return done(null, user);
    });
});

var passport = require('passport');
passport.use(SteamStrategy);

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

passport.deserializeUser(function(identifier, done) {
done(null, {
    identifier: identifier,
    steamId: identifier.match(/\d+$/)[0]
});
});

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

app.post('/auth/openid', passport.authenticate('openid'));

app.get('/auth/openid/return', passport.authenticate('openid'),
function(request, response) {
    if (request.user) {
        response.redirect('/?steamid=' + request.user.steamId);
    } else {
        response.redirect('/?failed');
    }
});

app.post('/auth/logout', function(request, response) {
request.logout();
response.redirect(request.get('Referer') || '/')
});

app.get('/', function(request, response) {
response.write('<!DOCTYPE html>')
if (request.user) {
    response.write(request.session.passport &&
        JSON.stringify(request.user) || 'None');
    response.write('<form action="/auth/logout" method="post">');
    response.write('<input type="submit" value="Log Out"/></form>');
} else {
    if (request.query.steamid) {
        response.write('Not logged in.');
    }
    response.write('<form action="/auth/openid" method="post">');
    response.write(
        '<input name="submit" type="image" src="http://steamcommunity-a.' +
        'akamaihd.net/public/images/signinthroughsteam/sits_small.png" ' +
        'alt="Sign in through Steam"/></form>');
}
response.send();
});

var port = 4000;
var server = app.listen(port);
console.log('Listening on port ' + port);
...