Refresh CSRF token and retry API call
This commit is contained in:
parent
df3b7d3d63
commit
a77bfc6277
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -35,6 +35,7 @@ android/local.properties
|
|||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
.gradle
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
|
|
@ -47,6 +47,7 @@ class DeezerAPI {
|
|||
});
|
||||
//Post
|
||||
http.Response res = await http.post(uri, headers: headers, body: jsonEncode(params));
|
||||
dynamic body = jsonDecode(res.body);
|
||||
//Grab SID
|
||||
if (method == 'deezer.getUserData') {
|
||||
for (String cookieHeader in res.headers['set-cookie'].split(';')) {
|
||||
|
@ -55,8 +56,11 @@ class DeezerAPI {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return jsonDecode(res.body);
|
||||
// In case of error "Invalid CSRF token" retrieve new one and retry the same call
|
||||
if (body['error'].isNotEmpty && body['error'].containsKey('VALID_TOKEN_REQUIRED') && await rawAuthorize()) {
|
||||
return callApi(method, params: params, gatewayInput: gatewayInput);
|
||||
}
|
||||
return body;
|
||||
}
|
||||
|
||||
Future<Map<dynamic, dynamic>> callPublicApi(String path) async {
|
||||
|
|
|
@ -752,14 +752,15 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
|
|||
if (playlist.tracks.length == 0) {
|
||||
//Get correct metadata
|
||||
deezerAPI.playlist(playlist.id)
|
||||
.catchError((e) => setState(() => _error = true))
|
||||
.then((Playlist p) {
|
||||
if (p == null) return;
|
||||
setState(() {
|
||||
playlist = p;
|
||||
});
|
||||
//Load tracks
|
||||
_load();
|
||||
})
|
||||
.catchError((e) {
|
||||
setState(() => _error = true);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -805,7 +806,7 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
|
|||
),
|
||||
Container(height: 4.0),
|
||||
Text(
|
||||
playlist.user.name,
|
||||
playlist.user.name??'',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
textAlign: TextAlign.center,
|
||||
|
|
Loading…
Reference in a new issue