Ich verwende akka-http für den Aufbau einer REST-API. (Ich bin neu beim Erstellen von REST-Webdiensten). Ich weiß nicht, wie ich Cookies erhalten und setzen kann, ohne eine Sitzung zu benutzen. Dieser Cookie muss den Verschlüsselungs-Token-Zugriff enthalten. Ich benutze weder Play noch Spray. Mein Code für den Moment ist:Akka-http & scribe für linkedin API: set/get cookie ohne session (scala)
lazy val signin = path("signin") {
get {
/* create the OAuthService object with a callback URL*/
val service = buildService()
/* get the request token*/
val requestToken = service.getRequestToken
/* create the cookie */
val jwtCookieEncrypted = tokenUtil.createLinkedinTokenSecret(requestToken)
val cookie = HttpCookie("jwtTokenCookie", jwtCookieEncrypted)
/* making the user validate our requestToken by redirecting him to the following URL*/
val authURL = service.getAuthorizationUrl(requestToken)
redirect(authURL, StatusCodes.TemporaryRedirect)
}
}
lazy val callback = path("callback") {
// extract cookie with the jwtTokenCookie name
cookie("jwtTokenCookie") { cookiePair =>
complete(s"The logged in user is '${cookiePair.name}'")
}
get {
parameters('code, 'state) { (code, state) => // must come from cookie and not request parameters
/* create the OAuthService object with a callback URL*/
val service = buildService()
/* get the request token*/
val requestToken = new Token(code, state)
if(state == tokenUtil.decryptLinkedinToken(requestToken.getSecret).getOrElse("")) "continue" else "throw error"
val verifier = new Verifier(state)
/* get the access token
(need to exchange requestToken and verifier for an accessToken which is the one used to sign requests)*/
val accessToken = service.getAccessToken(requestToken, verifier)
logger.debug(accessToken.getRawResponse)
/* sign request*/
val ResourceUrl = Settings.LinkedIn.ResourceUrl
val request = new OAuthRequest(Verb.GET, ResourceUrl)
service.signRequest(accessToken, request)
val response = request.send
if (response.getCode == StatusCodes.OK.intValue) complete(response.getBody)
else complete(int2StatusCode(response.getCode))
}
}
}
signin ~ callback
Danke für Ihre Antwort. Was meinst du? Weiterleitung ist kein guter Weg? Ich dachte, das war die Aufgabe von Scribe, das zu tun –
Die Redirect-Funktion erstellt eine Antwort mit einem 30x-Code. Wenn Sie den Header "Set-cookie" hinzufügen möchten, ist es besser, die Antwort "manuell" zu erstellen und stattdessen redirect aufzurufen. – EmiCareOfCell44