typescript - Hur implementerar man Superlogin-Client autentisering på klientsidan med Superlogin, ionic3, PouchDB och CouchDB?


Jag har ingen aning om var jag ska placera superlogin-client-importen och konfigurationen och hur man får ett autentiseringstoken lagrat på lokal lagring så att mobilappen kan förbli autentiserad när den är offline.

Jag har försökt med detta men det fungerar inte:

    import PouchDB from 'pouchdb';
    import superlogin from 'superlogin-client';

    var config = {
      // The base URL for the SuperLogin routes with leading and trailing slashes (defaults to '/auth/')
      baseUrl: 'http://localhost:3000/auth/',
      // A list of API endpoints to automatically add the Authorization header to
      // By default the host the browser is pointed to will be added automatically
      endpoints: ["localhost:3000"],
      // Set this to true if you do not want the URL bar host automatically added to the list
      //noDefaultEndpoint: false,
      // Where to save your session token: localStorage ('local') or sessionStorage ('session'), default: 'local'
      storage: 'local',
      // The authentication providers that are supported by your SuperLogin host
      providers: ['facebook', 'twitter'],
      // Sets when to check if the session is expired. 'stateChange', 'startup' or nothing.
      // 'stateChange' checks every time $stateChangeStart or $routeChangeStart is fired
      // 'startup' checks just on app startup. If this is blank it will never check.
      checkExpired: false,
      // A float that determines the percentage of a session duration, after which SuperLogin will automatically refresh the
      // token. For example if a token was issued at 1pm and expires at 2pm, and the threshold is 0.5, the token will
      // automatically refresh after 1:30pm. When authenticated, the token expiration is automatically checked on every
      // request. You can do this manually by calling superlogin.checkRefresh(). Default: 0.5
      refreshThreshold: 0.5
    };

    superlogin.configure(config);
    /*
      Generated class for the StoresProvider provider.

      See https://angular.io/guide/dependency-injection for more info on providers
      and Angular DI.
    */
    @Injectable()
    export class StoresProvider {
      db: any;
      remote: any;

      mystores: any = {};
      constructor() {
        console.log('Hello StoresProvider Provider');}

Svar #1

Det verkar som att du försöker anropa superlogin från klientsidan (Ionic). Jag tror dock att superlogin-implementeringen bör vara på serversidan och din Ionic-app bör skicka en registreringsförfrågan till din Node-server, som i sin tur skulle utföra autentiseringen med superlogin.

Här är en exempelimplementation av en Node-server:

var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');
var logger = require('morgan');
var cors = require('cors');
var SuperLogin = require('superlogin');
var userRoutes=require('./app/user.route'); 
var app = express();

app.set('port', process.env.PORT || 3000);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'DELETE, PUT, OPTIONS,POST,GET');
res.header("Access-Control-Allow-Headers", "Authorization, Origin, X- 
Requested-With, Content-Type, Accept");
next();
});

var config = {
dbServer: {
protocol: 'http://',
host: '13.175.228.159:5984',  //should be url of couchdb server
user: 'couchadmin',
password: 'Passw0rd',
couchAuthDB: '_users',
userDB:'sl_users'
},
defaultSecurityRoles: {
members: ['merchant']
},
 mailer: {
  fromEmail: '[email ',
   options:{
    service: 'Gmail',
     auth: {
      user: '[email ',
      pass: 'simplepass'
    }
 }
},
security: {
  maxFailedLogins: 3,
  lockoutTime: 600,
  tokenLife: 86400,
  loginOnRegistration: true,
   defaultRoles:['merchant','user']
    },
    providers: {
   local: true
  }
}


var superlogin = new SuperLogin(config);

//enable cors preflight for all options.
app.options('*', cors()) // include before other routes 

// Mount SuperLogin's routes to our app
app.use('/auth', superlogin.router);
app.use('/user',userRoutes,superlogin.requireAuth);

app.listen(app.get('port'));
console.log("App listening on " + app.get('port'));