У меня есть функция, которая проверяет совпадение пароля и пользователя перед аутентификацией с использованием пользовательского токена.секретный ключ, видимый в javascript-коде (JavaScript, Firebase)?
function getUser(user, password) {
var usersRef = new Firebase("mydatabase/users");
var userRef = usersRef.child(user);
userRef.once("value",
function getHandler(snapshot) {
if (snapshot.val().password == password) {
var token = createToken(user);
ref.authWithCustomToken(token, authHandler);
} else {
alert("Gebruikersnaam en code komen niet overeen");
}
},
function errorHandler(errorObject) {
alert("Ophalen van gebruikersgegevens is mislukt: " + errorObject.code);
}
);
}
Чтобы создать электронный маркер Я экземпляр класса firebase FirebaseTokenGenerator с секретным ключом. Подобно
function createToken(user) {
var tokenGenerator = new FirebaseTokenGenerator("<secret key...>");
var updatedObj = {
"uid": "custom:"+user,
"level": "docent"
}
return tokenGenerator.createToken(updatedObj);
Однако таким образом секретный ключ будет виден для всех, кто смотрит в исходный код .js. Я почти уверен, что это не то, как это должно быть сделано, но как правильно это сделать, Firebase-way?
EDIT:
Я попытался выяснить яваскрипт пути для этого, но застрял там так переключился обратно на PHP. Использовал код генератора firebase-токена от github (here), установил его, включая зависимости в моем проекте, с composer и что все, кажется, работает нормально (генерируется токен).
<?php
include_once "FirebaseToken.php";
$uid = $_POST['uid'];
$level = $_POST['level'];
$tokenGen = new Services_FirebaseTokenGenerator("<secret key>");
$token = $tokenGen->createToken(array("uid" => "custom:BAAJ"), array("admin" => False));
echo $token;
?>
Читая это SO post я обнаружил, что после будет способом встроить его в моем яваскрипте кода:
function createToken(user) {
$.post('php/createtoken.php', {uid: user, level: 'docent'}, function(data){
//successful ajax request
return data;
}).error(function(error){
alert("Create token mislukt: "+error);
});
};
Но сому причины маркер не генерируется тогда. При вызове из getUser сначала как часть успеха, так и ошибка функции javascript createToken вообще не выполняются (приводя к неопределенному значению для токена переменной. Затем createToken вызывается во второй раз (??), а затем выполняется часть успеха однако данные в настоящее время не содержит маркер, но полный PHP скрипт ...?
в чем проблема и как ее решить?
любой тип проверки javascript небезопасен, потому что, как вы сказали, любой может видеть или редактировать клиентскую часть javascript. Правильный способ сделать это будет с php, который является серверным и безопасным. Я считаю, что вы все делаете правильно. –
@ViperCode PHP - это серверная сторона, да. Secure? Эх. Он настолько же безопасен, как и вы его пишете, и не обязательно должен быть PHP. –