Ich verwende den impliziten Oauth-Grant-Flow für die Anmeldung bei einer Anwendung. Wenn ein Benutzer die Website zugreift, die nicht authentifiziert ist, werden sie mit der folgenden Struktur an eine URL gesendet:Safari interpretiert URL-Variable nicht?
baseurl + '/oauth/authorize?response_type=token&client_id=xxxx&redirect_uri=' + redirecturl
baseurl
die Lage der Seite ist, die die Eingänge enthält für Ihren Benutzernamen und Ihr Passwort eingeben. Wenn Sie die korrekten Anmeldeinformationen eingeben und auf die Schaltfläche "Anmelden" auf dieser Seite klicken, sollten Sie an die Adresse redirecturl
weitergeleitet werden. redirecturl
ist der Speicherort der Anwendung selbst (eine eckige App), auf die der Benutzer zuerst zuzugreifen versuchte.
Der folgende Code behandelt den Fall, nachdem der Benutzer auftritt angemeldet hat:
$urlRouterProvider
.when('/token_type=bearer&access_token=:accessToken', function ($location, $state, User, storageService) {
storageService.clearAll();
User.authenticate($location.path().substr(1));
$state.go('marketplace.applications');
}
);
Wenn ich Chrome verwenden, funktioniert alles wie erwartet. Wenn ich Safari verwende, wird der obige Code niemals ausgeführt.
Beachten Sie, dass :accessToken
in der Zeichenfolge enthalten ist, die an $urlRouterProvider.when()
übergeben wird.
Ich habe einige Untersuchungen durchgeführt und festgestellt, dass ich das gleiche Verhalten in Chrome reproduzieren kann, wenn ich den :accessToken
Teil der Zeichenfolge entfernt, die an $urlRouterProvider.when()
übergeben wird. Dies lässt mich glauben, dass Safari die :accessToken
Variable nicht interpretieren kann. Gibt es etwas darüber, wie Safari URLs interpretiert, die nicht mit dem vorhandenen Code kompatibel sind oder ist es etwas ganz anderes?
Vielen Dank.