Возможно ли, чтобы приложение могло проверить действительность токена самостоятельно, не делая сетевой вызов на сервере auth?
blockquote>
- Истечение срока действия: Включить en
exp
заявить в токен с датой истечения срока действия. Любой клиент может декодировать токен и проверять дату- Подпись: клиент может проверить подпись маркера, чтобы проверить, исходит ли он от ожидаемого сервера и доверять содержащимся данным. Затем вам понадобится использовать асимметричную пару ключей (например, RSA)
. Каковы лучшие практики, которые должен выполнять разработчик приложения при использовании сервера auth для SSO?
< / blockquote>Этот вопрос основан на мнениях и вне темы в StackOverflow. Не могли бы вы уточнить свои сомнения или включить проблему программирования?
Является ли SSO служебной?
blockquote>Нет, ваше приложение является ярким примером того, зачем нужна система SSO:
- SSO: 5 приложений -> 1 пользовательский вход
- Без SSO: 5 приложений -> 5 пользовательских логинов
Вам не нужно создавать двух помощников. Работает только ваш первый помощник:
Template.hello.helpers({
pieces() {
let data = [{
"_id": "5c43b0e463ad7e8adfa4f07a",
"name": "The Box",
"price": "80",
"parts": [
{ "pname": "piccolo", "pprice": "3" },
{ "pname": "Flute 1", "pprice": "3" }
]
}]
return data;
}
});
Затем вы можете выполнять итерации по частям и частям. Если вы хотите получить доступ внутри вложенного # каждого имени элемента И имени элемента. Вы можете использовать {{../name}}
для доступа к родительскому Datacontext.
<table class="table">
<tbody>
{{#each pieces}}
<tr class="itemList">
<td class="name">{{name}}</td>
<td class="pdf">PDF</td>
<td class="audio">AUDIO</td>
<td class="format">FORMAT</td>
<td class="price">${{price}}</td>
<td><input class="qty" type="number" name="quantity" value="0"></td>
</tr>
{{#each parts}}
<tr>
<td colspan="3">{{../name}}</td>
<td class="partName">{{pname}}</td>
<td class="partPrice">{{pprice}}</td>
<td><input class="partQty" type="number" name="quantity" value="0"></td>
</tr>
{{/each}}
{{/each}}
</tbody>
</table>
Но использование блока {{#each}}
не очень хорошая практика, вы должны использовать {{#each in}}
. Блок {{#each in}}
создает переменную, которую вы можете легко использовать.
<table class="table">
<tbody>
{{#each piece in pieces}}
<tr class="itemList">
<td class="name">{{piece.name}}</td>
<td class="pdf">PDF</td>
<td class="audio">AUDIO</td>
<td class="format">FORMAT</td>
<td class="price">${{piece.price}}</td>
<td><input class="qty" type="number" name="quantity" value="0"></td>
</tr>
{{#each part in piece.parts}}
<tr>
<td colspan="3">{{piece.name}}</td>
<td class="partName">{{part.pname}}</td>
<td class="partPrice">{{part.pprice}}</td>
<td><input class="partQty" type="number" name="quantity" value="0"></td>
</tr>
{{/each}}
{{/each}}
</tbody>
</table>
Первое, что нужно понять, это то, что ваш parts
помощник а) не работает и б) не то, что вам нужно в любом случае.
bandmusic.find({parts})
не означает «вернуть массив частей из документов в коллекции bandmusic», что, как вам кажется, и требуется. {parts}
- сокращение от ES6 для {parts: parts}
(см. этот ответ ). Но ваша функция не имеет переменной parts
- поэтому в вашем find
вы действительно говорите: «найдите документы, которые соответствуют условию {parts: undefined}
То, что вы пытаетесь сделать со своим вложенным #each
, это циклически проходить по каждому документу в базу данных, а затем в каждом документе выполните цикл по массиву parts
.
Итак, вы получаете документы от своего помощника pieces
, и каждый документ содержит массив parts
, который вы можете просто циклически проходить без помощи помощника.
Ваш код должен работать, если вы просто удалите parts
помощник. У Blaze есть порядок поиска, о котором вы можете прочитать здесь . Это означает, что когда Blaze видит parts
, он сначала думает: «Есть ли помощник, который называется parts
?» - который есть, и он не работает, так что ничего не происходит.
Но что вы хотите, чтобы это подумайте: «Есть ли поле в текущем контексте данных, называемое parts
», - оно есть, но helpers
идет выше в порядке поиска, поэтому оно никогда не попадает туда.
Так что самое простое решение в теории это удалить помощника.
Как видно из ссылки lookup order
, часто неясно, что относится к тому, что в пробелах / Blaze. Вы можете сделать вещи намного понятнее, используя синтаксис, описанный в Blaze docs для each
Вместо #each array
вы должны ввести новую переменную для ссылки на текущий элемент в массив - #each item in array
. А затем получите доступ к свойствам элемента как обычно - item.prop1 - item.prop2
Таким образом, ваш новый код становится:
{{#each piece in pieces}}
<tr class="itemList">
<td class="name">{{piece.name}}</td>
<td class="pdf">PDF</td>
<td class="audio">AUDIO</td>
<td class="format">FORMAT</td>
<td class="price" >${{piece.price}}</td>
<td><input class ="qty" type ="number" name ="quantity" value="0"></td>
</tr>
{{#each part in piece.parts}}
<tr>
<td colspan="3"></td>
<td class="partName">{{part.pname}}</td>
<td class="partPrice">{{part.pprice}}</td>
<td><input class="partQty" type="number" name="quantity" value="0"></td>
</tr>
{{/each}}
{{/each}}