Доступ к выборке по адресу «https://orbis-api-web.azurewebsites.net ... freshToken»
из источника «https://orbis-solidarity.com» заблокирован политикой CORS:
Нет заголовка «Access-Control-Allow-Origin» запрошенный ресурс.
и
Не удалось загрузить ресурс: net::ERR_FAILED
TypeError: Не удалось получить
Код: Выделить всё
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigins", policy =>
{
policy.WithOrigins(
"https://orbis-api-web.azurewebsites.net",
"http://localhost:5173",
"https://orbis-solidarity.netlify.app",
"https://orbis-solidarity.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyHeader();
});
});
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowLocalhost", policy =>
{
policy.WithOrigins("http://localhost:5173")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
Код: Выделить всё
app.UseCors("AllowSpecificOrigins");
app.UseCors("AllowLocalhost");
Код: Выделить всё
[HttpPost("RefreshToken")]
public async Task RefreshToken([FromForm] string refreshToken)
{
var storedToken = await _userTokenRepository.FindByRefreshTokenAsync(refreshToken);
if (storedToken == null)
return Unauthorized("Invalid refresh token.");
var user = await _usersRepository.FindByIdAsync(storedToken.UserId);
if (user == null)
return Unauthorized("User not found.");
var newAccessToken = CreateToken(user);
var newRefreshToken = GenerateRefreshToken();
storedToken.Token = newAccessToken;
storedToken.RefreshToken = newRefreshToken;
storedToken.ExpiryDate = DateTime.UtcNow.AddMinutes(120);
storedToken.RefreshTokenExpiryDate = DateTime.UtcNow.AddDays(7);
await _userTokenRepository.UpdateAsync(storedToken);
return Ok(new
{
Token = newAccessToken,
RefreshToken = newRefreshToken
});
}
Код: Выделить всё
try {
const response = await fetch(`${this.ApiUrl}/UserAuth/RefreshToken`, {
method: 'POST',
body: new FormData().append('refreshToken', this.refreshToken),
});
} catch (error) {
console.error("Error refreshing token", error);
}
Бэкэнд: ASP.NET Core 8, размещенный в веб-приложении Azure (https://orbis-api-web.azurewebsites.net)
Внешний интерфейс: Vue.js, размещенный на Netlify (https://orbis-solidarity.com)
Конечная точка API: POST /api/v1/UserAuth/RefreshToken
Подробнее здесь: https://stackoverflow.com/questions/798 ... -allow-ori
Мобильная версия