Lien de connexion directe permanent dans le récapitulatif de planning
{lien_connexion} devient un lien permanent (réutilisable, sans expiration,
signé HMAC, rien de stocké) au lieu d'un lien magique de 30 min à usage
unique ou d'un simple lien vers le site. Compte bénévole créé à l'envoi
s'il manque ; révocation par « Renouveler le lien de connexion » sur la
fiche (Account.login_link_version, migration 0031) ; jamais pour la
coordination.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
8d6781e6ce
commit
05cdb0276b
@@ -9,6 +9,7 @@ import {
|
||||
useCreateAccount,
|
||||
useCreateVolunteer,
|
||||
useDeleteAccount,
|
||||
useResetLoginLink,
|
||||
useDeleteVolunteer,
|
||||
useExecuteImport,
|
||||
useExportMecenatReceipts,
|
||||
@@ -112,6 +113,7 @@ function VolunteerAccessSection({
|
||||
const accounts = useAccounts();
|
||||
const createAccount = useCreateAccount();
|
||||
const deleteAccount = useDeleteAccount();
|
||||
const resetLoginLink = useResetLoginLink();
|
||||
const account = accounts.data?.find((a) => a.volunteer_id === volunteerId);
|
||||
|
||||
return (
|
||||
@@ -157,8 +159,29 @@ function VolunteerAccessSection({
|
||||
{t('config.vol.access.needEmail')}
|
||||
</div>
|
||||
) : null}
|
||||
{account && account.auth_method === 'magic_link' ? (
|
||||
<div className="mt-[6px] flex flex-wrap items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
disabled={resetLoginLink.isPending}
|
||||
onClick={() => {
|
||||
if (window.confirm(t('config.vol.access.resetLinkConfirm'))) {
|
||||
resetLoginLink.mutate(account.id);
|
||||
}
|
||||
}}
|
||||
className="cursor-pointer border-2 border-ink bg-paper px-[8px] py-[5px] font-display text-[9.5px] font-extrabold uppercase tracking-wide hover:bg-yellow disabled:opacity-50"
|
||||
>
|
||||
{t('config.vol.access.resetLink')}
|
||||
</button>
|
||||
<HelpTip text={t('config.vol.access.resetLinkHint')} />
|
||||
{resetLoginLink.isSuccess ? (
|
||||
<span className="font-mono text-[9.5px] font-bold">{t('config.vol.access.resetLinkDone')}</span>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
{createAccount.isError ? <ErrorNote error={createAccount.error} /> : null}
|
||||
{deleteAccount.isError ? <ErrorNote error={deleteAccount.error} /> : null}
|
||||
{resetLoginLink.isError ? <ErrorNote error={resetLoginLink.error} /> : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user