exchangeAccessToken method
To exchange an authorization code for an access token
Implementation
@override
Future<SocialSignInResultInterface> exchangeAccessToken(
String authorizationCode) async {
try {
final response = await http.post(
Uri.parse(_accessTokenUrl),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: jsonEncode({
'client_id': clientId,
'client_secret': clientSecret,
'code': authorizationCode,
'redirect_uri': redirectUrl,
}),
);
if (response.statusCode == 200) {
final body = jsonDecode(response.body) as Map<String, dynamic>;
if (body.containsKey('access_token')) {
// Get user data with the access token
final userResponse = await http.get(
Uri.parse(_userDataUrl),
headers: {
'Accept': 'application/json',
'Authorization': 'token ${body['access_token']}',
},
);
if (userResponse.statusCode == 200) {
return GitHubSignInResult(
SignInResultStatus.ok,
accessToken: body['access_token'],
state: stateCode,
);
}
}
throw handleResponseBodyFail(body);
}
throw handleUnSuccessCodeFail(response);
} catch (e) {
return GitHubSignInResult(
SignInResultStatus.failed,
errorMessage: e.toString(),
);
}
}