[英]Swift Vapor Cookies not working
我正在嘗試創建cookie,但我沒有在瀏覽器中看到任何cookie。 而不是我在Postman上得到不同的輸出和chrome瀏覽器上的不同輸出。
打擊是我編寫cookie的代碼。
創建路線
drop.get("create", handler:createCookie)
處理器
func createCookie(request: Request) throws -> ResponseRepresentable { let cookie = Cookie(name: "login", value:"value", expires: generateExpirationDate(), secure: true) request.cookies.insert(cookie) return "Done" }
下面是func來創建過期處理程序
func generateExpirationDate() -> Date { return Date() + (60 * 1) // 1 Minutes later }
在Chrome瀏覽器中,我得到兩個cookie,如下圖所示。
但是我想要的那個不存在。 !!!!!!!
編輯 :
我也試過下面的代碼,但Postman沒有運氣,但是這個'在chrome中工作',我對其他瀏覽器有疑問!!!!
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
}
您的預編輯代碼無效,因為您要將cookie添加到request
,而不是response
。 響應是發送到瀏覽器的內容,因此這是設置cookie的正確位置。
這是一個完整的例子:
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
檢查Vapor發送的標頭,您可以清楚地看到cookie的設置位置。
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
在本地環境中,cookie沒有運行,我和Postman有同樣的問題,你可以試試真實的環境,比如使用Heroku,它是免費的。
也許你測試使用Postman應用程序Interceptor Cookies插件的cookie 。
這段代碼對我有用,我正在使用中間件控制器來設置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)
我希望我一直很有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.