there is a problem with the redirect when getting the AccessToken.
This is the error:
Invariant violation: AccessTokenRequest requires a valid redirectUri (must also match the one used in the authentication request). Example: myapp://redirect
const [username, setUsername] = useState('');
const [token, setToken] = useState('');
const [email, setEmail] = useState('');
const [discovery, setDiscovery] = useState([]);
const [authRequest, setAuthRequest] = useState([]);
const [authorizeResult, setAuthorizeResult] = useState(null);
const scopes = ["openid", "profile", "email", "offline_access"];
const domain = `https://login.microsoftonline.com/${tenetID}/v2.0`;
const redirectUrl = AuthSession.makeRedirectUri({
scheme: "exp",
useProxy: false,
host: "183.132.2.19000",
});
useEffect(() => {
const getSession = async () => {
try {
const d = await AuthSession.fetchDiscoveryAsync(domain);
// console.log("Obj authSession",d)
const authRequestOptions = {
prompt: AuthSession.Prompt.Login,
responseType: AuthSession.ResponseType.Code,
scopes: scopes,
usePKCE: true,
clientId: clientID,
redirectUri: redirectUrl,
};
const authRequest = new AuthSession.AuthRequest(authRequestOptions);
//console.log("Auth request options:", authRequestOptions.scopes);
setAuthRequest(authRequest);
setDiscovery(d);
//console.info("Discovery object:", d);
} catch (error) {
console.error(error);
}
};
getSession();
}, []);
useEffect(() => {
const getCodeExchange = async () => {
try {
console.log('entro')
const tokenResult = await AuthSession.exchangeCodeAsync({
grant_type: "authorization_code",
code: authorizeResult.params.code,
client_id: clientID,
client_secret: clientSecret,
redirect_uri: redirectUrl,
extraParams: {
code_verifier: authRequest.codeVerifier || "",
},
},
discovery,
console.log('segunda entrada')
);
console.log('redirect_uri:', redirectUrl);
// console.log("Token scopes:", tokenResult);
console.log('tecera entrada')
const { access_token, refresh_token, expires_in } = tokenResult;
console.log("Response accessToken from Graph v2", access_token);
setToken(access_token)
console.info(access_token)
const response = await fetch(
`https://graph.microsoft.com/v1.0/me`,
{
headers: {
Authorization: `Bearer ${access_token}`,
},
}
);
console.log("Response from Graph API:", response);
//givenName surname userPrincipalName id
const responseJson = await response.json();
// console.log("Access token scopes:", responseJson.scope);
console.info(responseJson)
const { givenName } = responseJson;
setUsername(responseJson.givenName);
// setEmail(responseJson.mail);
// setId(responseJson.id);
console.log(givenName)
return navigation.navigate("HomeScreen");
} catch (error) {
console.error("error capa 1 "+error);
}
};
if (authorizeResult && authorizeResult.type === "success" && authRequest) {
getCodeExchange();
}
}, [authorizeResult, authRequest, discovery, clientID, redirectUrl, navigation]);
