React Native Expo 出现 Twitch API 401 错误
Twitch API 401 error with React Native Expo
我正在尝试使用 React Native Expo 从 Twitch 获取用户信息,但它总是 returns 401 错误。
我发现它正确获取了OAuth令牌,但问题出现在它之后。
这是我的代码:
WebBrowser.maybeCompleteAuthSession();
// Endpoint
const discovery = {
authorizationEndpoint: 'https://id.twitch.tv/oauth2/authorize',
tokenEndpoint: 'https://id.twitch.tv/oauth2/token',
revocationEndpoint: 'https://id.twitch.tv/oauth2/revoke',
};
// Login Screen
export function loginScreen({ navigation }) {
const [request, response, promptAsync] = useAuthRequest(
{
responseType: ResponseType.Token,
clientId: '(deleted)',
// For usage in managed apps using the proxy
redirectUri: makeRedirectUri({ useProxy: true }),
scopes: ['openid', 'user_read', 'user_subscriptions'],
},
discovery
);
React.useEffect(() => {
if (response?.type === 'success') {
fetch('https://api.twitch.tv/kraken/user', {
method: 'GET',
headers: {
'Accept': 'application/vnd.twitchtv.v5+json',
'Client-ID': '(deleted)',
'Authorization': 'OAuth ' + response.params
}
})
.then((data) => {
AsyncStorage.setItem('userData', JSON.stringify(data))
.then(() => console.log(JSON.stringify(data))) // console.log for testing
.then(() => navigation.navigate('Home'))
})
.catch((err) => alert(err))
}
}, [response]);
我参考了 this document 进行身份验证。
Twitch 登录并使用 Expo 的 expo-auth-session 获取用户信息。
第 1 步: 创建一个帐户并在 Twitch 开发者上启用 two-factor 身份验证 site.You 将获得一个密钥。
第 2 步: 安装 Expo 的 expo install expo-auth-session
步骤 3: 在 App.json 文件中添加方案
{
"expo": {
"scheme": "myapp"
}
}
为了能够深入 link 回到您的应用程序,您需要在您的项目 app.config.js 或 app.json 中设置一个方案,然后构建您的独立应用程序应用程序(无法通过 OTA 更新进行更新)。如果您不包含方案,身份验证流程将完成,但无法将信息传回您的应用程序,用户将不得不手动退出身份验证模式(导致取消事件)。
第 4 步:
import * as AuthSession from 'expo-auth-session';
// To fetch twitch user information
const getTwitchUserInformation = twitchToken => {
const url = 'https://api.twitch.tv/helix/users';
const header = {
Authorization: `Bearer ${twitchToken}`,
'Client-ID': SOCIAL_CONSTANTS.TWITCH_CLIENT_ID,
};
fetch(url, {
method: 'GET',
headers: header,
})
.then(response => response.json())
.then(response => {
const userResponse = response && response.data[0];
console.log(userResponse);
})
.catch(error => {
console.log(error);
});
};
const signInWithTwitch = async () => {
const redirectUrl = AuthSession.getRedirectUrl();
const authUrl = `https://id.twitch.tv/oauth2/authorize?client_id=${ENTER_CLIENT_ID_HERE}&redirect_uri=${redirectUrl}&response_type=token&scope=user:edit+user:read:email&force_verify=true`
const {type, params} = await AuthSession.startAsync({authUrl});
if (type === 'success') {
const {access_token, token_type} = params;
getTwitchUserInformation(access_token);
}
};
我正在尝试使用 React Native Expo 从 Twitch 获取用户信息,但它总是 returns 401 错误。
我发现它正确获取了OAuth令牌,但问题出现在它之后。
这是我的代码:
WebBrowser.maybeCompleteAuthSession();
// Endpoint
const discovery = {
authorizationEndpoint: 'https://id.twitch.tv/oauth2/authorize',
tokenEndpoint: 'https://id.twitch.tv/oauth2/token',
revocationEndpoint: 'https://id.twitch.tv/oauth2/revoke',
};
// Login Screen
export function loginScreen({ navigation }) {
const [request, response, promptAsync] = useAuthRequest(
{
responseType: ResponseType.Token,
clientId: '(deleted)',
// For usage in managed apps using the proxy
redirectUri: makeRedirectUri({ useProxy: true }),
scopes: ['openid', 'user_read', 'user_subscriptions'],
},
discovery
);
React.useEffect(() => {
if (response?.type === 'success') {
fetch('https://api.twitch.tv/kraken/user', {
method: 'GET',
headers: {
'Accept': 'application/vnd.twitchtv.v5+json',
'Client-ID': '(deleted)',
'Authorization': 'OAuth ' + response.params
}
})
.then((data) => {
AsyncStorage.setItem('userData', JSON.stringify(data))
.then(() => console.log(JSON.stringify(data))) // console.log for testing
.then(() => navigation.navigate('Home'))
})
.catch((err) => alert(err))
}
}, [response]);
我参考了 this document 进行身份验证。
Twitch 登录并使用 Expo 的 expo-auth-session 获取用户信息。
第 1 步: 创建一个帐户并在 Twitch 开发者上启用 two-factor 身份验证 site.You 将获得一个密钥。
第 2 步: 安装 Expo 的 expo install expo-auth-session
步骤 3: 在 App.json 文件中添加方案
{
"expo": {
"scheme": "myapp"
}
}
为了能够深入 link 回到您的应用程序,您需要在您的项目 app.config.js 或 app.json 中设置一个方案,然后构建您的独立应用程序应用程序(无法通过 OTA 更新进行更新)。如果您不包含方案,身份验证流程将完成,但无法将信息传回您的应用程序,用户将不得不手动退出身份验证模式(导致取消事件)。
第 4 步:
import * as AuthSession from 'expo-auth-session';
// To fetch twitch user information
const getTwitchUserInformation = twitchToken => {
const url = 'https://api.twitch.tv/helix/users';
const header = {
Authorization: `Bearer ${twitchToken}`,
'Client-ID': SOCIAL_CONSTANTS.TWITCH_CLIENT_ID,
};
fetch(url, {
method: 'GET',
headers: header,
})
.then(response => response.json())
.then(response => {
const userResponse = response && response.data[0];
console.log(userResponse);
})
.catch(error => {
console.log(error);
});
};
const signInWithTwitch = async () => {
const redirectUrl = AuthSession.getRedirectUrl();
const authUrl = `https://id.twitch.tv/oauth2/authorize?client_id=${ENTER_CLIENT_ID_HERE}&redirect_uri=${redirectUrl}&response_type=token&scope=user:edit+user:read:email&force_verify=true`
const {type, params} = await AuthSession.startAsync({authUrl});
if (type === 'success') {
const {access_token, token_type} = params;
getTwitchUserInformation(access_token);
}
};