2017-10-23 4 views
0

Ich baue ein soziales Netzwerk in reagieren-native/NodeJS und mit dem S3 Amazon-Dienst die Nutzer persönliche Fotos (Upload dienen)Amazon S3 dient Datei nur auf App-Nutzer in reagieren-native

Aber ich zu handhaben Ich kann meinen Kopf nicht darum herumlegen, wie ich diese Bilder bedienen soll. Meine Frage ist, wie kann ich diese hochgeladenen Bilder nur den Benutzern der Anwendung und nicht der ganzen Welt liefern?

Zuerst habe ich versucht, das Image explizit zu holen, dies erlaubte mir, die S3-Anmeldeinformationen direkt zu setzen, aber es scheint nicht praktisch.

Gibt es eine Möglichkeit, jeden GET-Anruf von einer App zu tätigen, die berechtigt ist, aus meinem Bucket zu holen?

Antwort

0

Dank @sergey habe ich es geschafft, die "getSignedUrl" -Methode zu meinen Bedürfnissen anzupassen.

Hier ist der Code, der für mich gearbeitet:

import AWS from 'aws-sdk/dist/aws-sdk-react-native'; 
const credentials = new AWS.Crendentials({ accessKeyId: '', secretAccessKey: ''}) 
const s3 = new AWS.S3({ credentials, signatureVersion: 'v4', region: ''}); 
// and there it is. 
const url = s3.getSignedUrl('getObject', { Bucket: 'your bucket name', Key: 'the filename'}). 

Und nun jeweils mehrere Verweise auf meine Fotos enthält ein Array, wenn ich Schleife durch, die ich während jeder Schleife eine einzige Pre-signierten URL für einen Artikel erstellen dass ich meine Komponente einfüge.

1

Was Sie brauchen, ist S3 URLs http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

Statt Abrufen Bilder signiert, zu diesen Bildern einzigartige signierte URLs erstellen (mit einer benutzerdefinierten Ablaufzeit, sagen sie 1 Woche) und diejenigen für Ihre Anwendung übergeben. Auf diese Weise können Sie Ihren S3-Bucket mit der Welt schließen, aber Ihre Anwendung wird in der Lage sein, die Bilder mit diesen privaten Links zu erhalten.

+0

Ich habe es geschafft, es viel Dank, eine weitere Frage, da jedes Mal, wenn ich durch eine Reihe von Benutzern durchlaufen ich n Mal signierte URL mit 1 Woche erstellen, wenn ich erneut Schleife ich werde den Prozess jedes Mal wiederholen, Wie stelle ich sicher, dass ein Link verwendet wird, wenn er nicht abgelaufen ist? muss ich jedes Mal die Anwesenheit zwischenspeichern und überprüfen? – MaieonBrix

0

Sie können die neue AWS Amplify Bibliothek verwenden, um dies zu erreichen: https://github.com/aws/aws-amplify

Es gibt eine Auth für Anmeldeinformationen Benutzer immer und Festlegung Identitäten, die beide in einem authentifizierte und nicht authentifizierte Zustand, sowie eine Storage Komponente, die Öffentlichkeit hat und private Zugangsprofile.

über npm Install:

npm install --save aws-amplify-react-native 

Sie müssen das Projekt verknüpfen, wenn Cognito Benutzer Pools mit:

react-native link amazon-cognito-identity-js 

Mehr Infos hier: https://github.com/aws/aws-amplify/blob/master/media/quick_start.md#react-native-development

Dann in den Modulen ziehen:

import Amplify, {Auth, Storage} from 'aws-amplify-react-native' 
Amplify.configure('your_config_file'); 
Storage.configure({level: 'private'}); 
Storage.get('myfile');