#firebase-authentication #razor-pages
#firebase-аутентификация #страницы razor
Вопрос:
я работаю над веб-сайтом со страницами razor. часть сайта должна быть доступна только зарегистрированным пользователям. решил использовать аутентификацию firebase (теперь с логином и паролем).
создал все необходимое в firebase. созданный серверный код для регистрации пользователя — работает хорошо. создана область, требующая авторизации
services.AddRazorPages(options =>
{
options.Conventions.AuthorizeAreaFolder("User", "/");
})
добавлено промежуточное программное обеспечение jwt
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
добавлен код на страницу входа в систему для вызова firebase для получения токена
function login()
{
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential) => {
// Signed in
var user = userCredential.user;
// ...
alert("signed");
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
alert(errorMessage);
});
}
получил токен из firebase.
если бы я вызвал сервис next, я бы просто поместил токен в заголовок «bearer».
попытался найти, как добавить заголовок в текущий браузер для будущих запросов, и потерпел неудачу.
как я понимаю, мне нужно, чтобы этот токен добавлялся в заголовок auth? как ? 🙂
чувствую себя глупо; (пытался погуглить, но большинство примеров предназначены для использования этого токена позже с вызовами api. или я иду в неправильном направлении?
тиа иш
Ответ №1:
хорошо. кажется, что невозможно добавить bearer из js, поэтому я переключился на cookies
в startup.cs используйте файлы cookie
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
context.Token = context.Request.Cookies["bearer"];
return Task.CompletedTask;
}
};
код для входа в систему с помощью firebase, поместите токен в файл cookie и перенаправьте
function login() {
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential) => {
// Signed in
var user = userCredential.user;
firebase.auth().currentUser.getIdToken(true).then(function (idToken)
{
document.cookie = "bearer" "=" idToken;
window.location.href = "/user/index";
}).catch(function (error) {
// Handle error
});
alert("signed");
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
alert(errorMessage);
});
}
или то же самое с FirebaseUI
function login1()
{
ui.start('#firebaseui-auth-container', {
signInSuccessUrl: '/User/index',
signInOptions: [
{
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
requireDisplayName: false
}
],
callbacks:
{
signInSuccessWithAuthResult: function (authResult, redirectUrl)
{
var user = authResult.user;
firebase.auth().currentUser.getIdToken(true).then(function (idToken) {
document.cookie = "bearer" "=" idToken;
}).catch(function (error) {
// Handle error
});
return true;
}
}
});
}