Erklären Sie dem Anfänger von Mean.io, wie die Authentifizierung des Mean.io-Beispielpakets funktioniert

9

Ich lerne mean.io von dieses Tutorial-Video , das das Beispielpaket zeigt (erstellt von mean package mymodule . Es wird auch unter" Pakete "auf Dokumentation ). Ich hätte gerne Hilfe, um zu verstehen, wie die angegebene Authentifizierung / Autorisierung funktioniert.

Das Standard-Beispielpaket / -modul verfügt über eine einfache Benutzerauthentifizierung auf der Clientseite

myapp / packages / mymodule / public / views / index.html enthält:

%Vor%

Auf der Serverseite

myapp / packages / mymodule / server / routes / mymodule.js enthält:

%Vor%

Die Magie der unterschiedlichen Authentifizierung beruht auf dem zweiten Argument von app.get() mit einem zusätzlichen Authentifizierungsrückruf : keine, auth.requiresLogin oder auth.requiresAdmin .

Dies ist die Authentifizierungszauberei (auch auf github ) ):

myapp / packages / Zugriff / server / config / authorization.js :

%Vor%

FRAGE A: Warum ist es "exports.requiresLogin" und "exports.requiresAdmin" in der Datei authorization.js anstatt "somethingselse.requiresLogin" und "somethingselse.requiresAdmin"? Ist das "exports "verwandt mit dem myapp / packages / access / server / config / pass.js s exports : module.exports = function(passport) { ...} , github ? Wenn ja, unter welchen Umständen können wir diese "Exporte" nutzen?

Da die Autorisierungsregeln der Authentifizierung im Paket "access" geschrieben und im Paket "mymodule" verwendet werden, sind die Mean.io-Pakete nicht unabhängig voneinander. Das Paket Access ist auf

registriert

myapp / packages / access / app.js , GitHub :

%Vor%

FRAGE B: Verbindet Mean.io automatisch alle Pakete oder gibt es Code, um Pakete irgendwo zu verlinken? Ist es aufgrund des Teils mit "Dies ist aus Gründen der Abwärtskompatibilität" unten abgebildet? Wenn ja, wo kann "auth" verwendet werden? Alle Pakete myapp / packages / ? Wie wäre es mit dem mean.io-Basis-App-Verzeichnis myapp / ?

%Vor%

FRAGE C: Warum ist es "Access.passport = pass;", sondern "middleware" für "Access.middleware = auth;"? Was passiert, wenn es "Access.auth = auth "?

    
randwa1k 18.08.2014, 05:42
quelle

1 Antwort

0

ZU FRAGE A (zur Verwendung von exports )

In Node.js werden durch das Zuweisen von Werten zum Objekt exports diese Werte für den Code require s der Quelldatei verfügbar gemacht.

Zum Beispiel die angegebene Datei foo.js :

%Vor%

und Datei main.js :

%Vor%

Das Ausführen von node main.js gibt foo= FOO ; bar= BAR aus.

Siehe zum Beispiel die Moduldokumentation zum Knoten oder diese Beschreibung auf require und exports .

ZU FRAGE B (auf Paket "Verknüpfung")

Die Antwort auf diese Frage ist die Ergänzung zu der Antwort auf Frage A.

Es gibt Code zum "Verknüpfen" der Pakete. Es ist die require -Anweisung.

In Ihrem app.js Quellcode setzt die erste Zeile ( var mean = require('meanio') lesen) die lokale Variable mean auf die Werte, die exports Objekt zugewiesen sind, wenn meanio.js und / oder meanio Modul ist geladen.

Gleiches gilt für passport = require('passport') . In diesem Fall entspricht die lokale Variable passport dem Wert von exports nach dem Index .js im Pass-Modul wird geladen.

ZUR FRAGE C

Ich bin mir nicht ganz sicher, was Sie hier fragen, aber lassen Sie mich einen Stich machen.

In diesem Fall:

1) var mean = require('meanio') in Zeile 1 "importiert" das Meanio-Modul, so dass die lokale Variable mean mehr oder weniger gleich dem Wert von exports im Meanio-Modul gesetzt wird.

2) Module = mean.Module in Zeile 2 setzt die lokale Variable Module gleich dem Wert von mean.Module , der im Meanio-Modul zugewiesen sein muss.

3) var Access = new Module('access') instanziiert eine Instanz der Klasse Module und weist sie der lokalen Variablen Access zu.

4) Access.passport = passport weist der Instanzvariable passport innerhalb der Instanz von meanio.Module named Access (dem Wert von passport modul require d in Zeile # 3)

zu

5) Access.middleware = auth weist der Instanzvariable middleward innerhalb der Instanz von meanio.Module benannte Access (dem von require('./server/config/authorization') in Zeile 11 zurückgegebenen Wert) zu.

Ich bin nicht vertraut mit dem Modul "mainio", aber basierend auf diesem Code sieht es so aus, als ob Sie die meanio.Module("access") -Instanz (namens Access ) konfigurieren, indem Sie bestimmte "magische" Variablennamen zuweisen.

Mit anderen Worten, anstatt Access.passport = passport; Access.middleware = auth könnten Sie Access.setPassport(passport); Access.setMiddleware(auth) oder (anstatt Zeile 5) var Access = new Module('access',passport,auth) .

haben

Das heißt, der Autor des "mainio" -Moduls scheint sich dafür entschieden zu haben, spezielle Variablennamen zu verwenden, um die Klasse zu konfigurieren, statt "set" -Methoden oder Parameter, die an den Konstruktor übergeben werden. Ich nehme an, dass irgendwo im Durchschnittskode ein Verweis auf etwas wie this.middleware und this.passport steht, wobei der Code davon ausgeht, dass Sie diese Instanzvariablen "ausgefüllt" haben, wie in den letzten Zeilen Ihres Codebeispiels .

Wenn Sie Access.auth = auth hinzufügen würden, würde nur das Access -Objekt eine neue attributierte namens auth haben, deren Wert gleich dem der lokalen Variable ist auth .

Wenn Sie Access.auth statt von Access.middleware verwendet haben, gehe ich davon aus, dass der Code in der Klasse Access , der this.middleware verwendet, fehlschlägt, da nein Wert wurde jemals Access.middleware zugewiesen und Access.auth ist keiner der "magischen" Variablennamen, nach denen mainio sucht.

    
Lela Jennings 03.06.2016 21:34
quelle

Tags und Links