Токен vanilla JS Jwt в HttpOnly Cookie не отправляется при использовании includeJavascript

Форум по Javascript
Ответить
Anonymous
 Токен vanilla JS Jwt в HttpOnly Cookie не отправляется при использовании include

Сообщение Anonymous »

Итак, я пытаюсь создать простой чат-сайт для школьного проекта. интерфейс находится на vanilla JS, а серверная часть - на ASP dotnet 8. Вот и у меня большие проблемы с авторизацией. Вход и регистрация работают нормально, но когда я пытаюсь сделать вызов API для поиска пользователя на контроллере с [authorize], я продолжаю получать 401. Теперь я знаю, почему я получаю 401, потому что с помощью приведенного ниже кода я проверяю значение в токене, если там ничего нет.
Но мой вопрос в том, что я не знаю, как это исправить. Я пробовал разные вещи, но, похоже, ничего не помогло понять, почему токен JWT не отправляется обратно, чтобы его можно было авторизовать на серверной стороне.

Код: Выделить всё

options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
// Log all cookies
Console.WriteLine("=== OnMessageReceived ===");
Console.WriteLine($"Cookies received: {string.Join(", ", context.Request.Cookies.Keys)}");

// 1) SignalR websocket transports send access_token in query string
var accessToken = context.Request.Query["access_token"].FirstOrDefault();
if (!string.IsNullOrEmpty(accessToken))
{
Console.WriteLine(" Token found in query string");
context.Token = accessToken;
return Task.CompletedTask;
}

// 2) fallback to the AuthToken cookie
if (context.Request.Cookies.TryGetValue("AuthToken", out var cookieToken) && !string.IsNullOrEmpty(cookieToken))
{
Console.WriteLine($" Token found in AuthToken cookie: {cookieToken.Substring(0, 20)}...");
context.Token = cookieToken;
}
else
{
Console.WriteLine(" No AuthToken cookie found!");
}

return Task.CompletedTask;
}
};
Итак, код ниже показывает, как выглядит код во внешнем интерфейсе, а также есть некоторый код для SignalR, но на данный момент он работает нормально, это в первую очередь функция поиска для пользователя, вот код.

Код: Выделить всё

render() {
const root = document.createElement('div');
root.innerHTML = `


Users

Search



Chat no one


Send Refresh


`;
root.querySelector('#searchBtn').addEventListener('click', async ()=> {
const q = root.querySelector('#search').value;
const res = await fetch(API + '/api/Users/search?q=' + encodeURIComponent(q), { withCredentials: true });
const users = await res.json();
const usersEl = root.querySelector('#users');
usersEl.innerHTML = '';
users.forEach(u=> {
Я знаю, что это не самый приятный код для просмотра, но после того, как я застрял здесь на неделю, это наименее важный для меня приоритет, поэтому я знаю. Также вот внутренний код, по которому я могу позвонить.

Код: Выделить всё

using ChatBackendFinal.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace ChatBackendFinal.Controllers
{
[ApiController]
[Route("api/Users")]
[Authorize(Policy = "AuthenticatedUsersOnly")]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
public UsersController(IUserService userService)
{
_userService = userService;
}
[HttpGet("search")]
public async Task SearchUsers([FromQuery] string query)
{
var users = await _userService.SearchAsync(query);
var result = users.Select(u => new { u.Id, u.Username, u.Email });
return Ok(result);
}
}
}
Спасибо, что уделили время и посмотрели на это как на тех, кто пытается учиться. Надеюсь, кто-нибудь сможет мне помочь.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-include
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»