Всё чуть сложнее, чем кажется.
1. Посли реги клиента мы определяем его клиентский идентификатор (CID; на основе браузера и подсети провайдера, к примеру)
2. Записывем его в базу на сервере и присылаем линк подтверждения регистрации на почту. Линк содержит криптованный клиентский ключ (серверным ключом, ключ для каждого клиента - генерируется свой).
3. После перехода по линку мы проверяем, что это действительно то устройство и наш пользователь, и присылаем ключ для дешифровки ключа и сохраняем его в браузер (Cookies или LocalStorage).
4. В момент загрузки закрытых данных (на сервере - они закрываются ключом авторизованного клиента), через JS мы берём ключ из хранилища браузера и дешифруем: пользователь видит чистые текстовые данные.
На любые "закрытые" данные нужно иметь всегда 2 ключа на их чтение: пользовательский и публичный.
Пользовательский - когда юзер залогинен.
Публичный - для всех, кто не залогинен. Он обычно НЕ используется, но если захотите какие-то данные открыть позже - нужно это предусмотреть заранее!
Как-то так...