2017-01-13 2 views
3

Ich versuche, Cookies zu erstellen, aber ich sehe keine Cookies im Browser. Stattdessen bekomme ich unterschiedliche Ausgabe auf Postman & verschiedene Ausgabe auf Chrome-Browser.Swift Vapor Cookies funktioniert nicht

Schlag ist, wie ich Code, um Cookies zu erstellen.

  1. erstellen Route

    drop.get("create", handler:createCookie) 
    
  2. Handler

    func createCookie(request: Request) throws -> ResponseRepresentable { 
    
    let cookie = Cookie(name: "login", value:"value", expires: generateExpirationDate(), secure: true) 
    request.cookies.insert(cookie) 
    
    return "Done" 
    } 
    
  3. unten ist func Ablauf Handler

    func generateExpirationDate() -> Date { 
        return Date() + (60 * 1) // 1 Minutes later 
    } 
    
zu erstellen

In Post Mann erhalte ich ein Cookie mit dem Namen "Dampf-Sitzungen" enter image description here

Und in Chrome-Browser erhalte ich zwei Cookies, wie in Abbildung unten.enter image description here

Aber mein Wunsch ist nicht da. !!!!!!!

EDIT:

Ich habe auch unter Code versucht, aber ohne Glück für Postman, aber diese ‚funktioniert in Chrom‘, ich habe Zweifel für anderen Browser !!!!

func createCookie(request: Request) throws -> ResponseRepresentable { 

    let cookie = Cookie(name: "login", value:"value", expires: generateExpirationDate(), secure: true) 

    let response = try Response(status: .ok, json: JSON(node: [ 
     "yo": "yoyo" 
     ])) 

    response.cookies.insert(cookie) 


    return response 
} 

Antwort

1

Ihr Pre-edit-Code funktioniert nicht, weil Sie das Cookie an den request hinzufügen, nicht die response. Die Antwort ist, was an den Browser gesendet wird, also ist dies der richtige Ort, um den Cookie zu setzen.

Hier ist ein vollständiges Beispiel:

import Foundation 
import Cookies 
import HTTP 
import Vapor 

let drop = Droplet() 

drop.get("create") { request in 
    let response = Response(status: .ok) 
    let expiry = Date(timeIntervalSinceNow: 60) 
    let cookie = Cookie(name: "login", value: "value", expires: expiry) 
    response.cookies.insert(cookie) 
    return response 
} 

drop.run() 

curl Mit den Header von Vapor gesendet zu überprüfen, kann man deutlich sehen, wo das Cookie gesetzt wird.

HTTP/1.1 200 OK 
Set-Cookie: login=value; Expires=Sat, 14 Jan 2017 05:31:32 GMT; Path=/ 
Date: Sat, 14 Jan 2017 05:30:32 GMT 
Content-Length: 0 
+0

hilfreich gewesen, aber als ich Antwort sagen Rückkehr mit Cookie wird für nicht funktionieren Postman App, und ich habe auch Zweifel für andere Browser. Ich werde das auf allen gängigen Browsern versuchen und werde meine Frage erneut aktualisieren. –

+0

Ich habe meine Antwort so bearbeitet, dass sie ein vollständiges, ausführbares Beispiel enthält. Wenn eine Client-Anwendung den Cookie nicht respektiert, liegt das an dem Client und nicht an dem Server. Vapor sendet den richtigen Header. Es sollte für alle gängigen Browser sicher sein. – tobygriffin

+0

@AnandSuthar Ich hatte keine Probleme mit Postboten – hhanesand

0

auf lokale Umgebung der Cookies nicht laufen, ich hatte gleiches Problem mit Postman, Sie auf reale Umgebung, zum Beispiel mit Heroku versuchen können, es ist kostenlos.

Vielleicht für Sie Cookies testen, die Postman-Anwendung Interceptor Cookies plugin verwenden.

Dieser Code funktioniert für mich, ich bin Middleware-Controller für Set-Cookie ..

let auth = AuthMiddleware(user: User.self) { value in 
     return Cookie(
      name: "your_cookie_name", 
      value: value, 
      expires: Date().addingTimeInterval(60 * 60 * 5), // 5 hours 
      secure: true, 
      httpOnly: true 
     ) 
    } 
    drop.middleware.append(auth) 

Ich hoffe, ich habe