Quali aspettative devo avere riguardo a quanto tempo un utente può rimanere connesso prima di essere nuovamente invitato a effettuare l’accesso?
Ho implementato la mia funzione di controllo in functions.php, integrandola con il plugin SSO per WordPress. La mia logica sembra piuttosto semplice, ma ho notato che un membro con una carta di credito rifiutata (e quindi senza il tag utente che la mia logica verifica) è riuscita ad accedere al mio forum oggi. Dopo un’ulteriore verifica, ho scoperto che l’ultima volta che si è connessa è stata un paio di giorni fa e, presumibilmente, risulta ancora connessa. Anche la data del suo ultimo accesso a WordPress risale a qualche giorno fa.
È previsto che le sue credenziali in cache continuino a funzionare? Se sì, esiste un modo per controllare la validità del token e/o rispondere a un webhook per forzare il logout?
Questo è controllato dall’impostazione del sito Discourse età massima della sessione. Imposta il numero di ore per cui gli utenti rimarranno connessi al tuo sito. Il valore predefinito è 1440 ore (60 giorni). Potresti provare a impostarlo su un valore inferiore. Se lo imposti troppo basso, agli utenti potrebbe sembrare un bug.
Ha senso. Puoi disconnettere manualmente gli utenti andando alla pagina di amministrazione di Discourse e cliccando sul pulsante ‘Disconnetti’ che vedrai in alto a destra nella pagina. Un’altra opzione per controllare questo comportamento sarebbe aggiungere del codice al tuo sito WordPress che disconnette gli utenti da Discourse quando l’abbonamento scade.
Molto apprezzato, Simon. Anche se penso che 60 giorni siano troppo lunghi per i miei scenari (si tratta di membri paganti, quindi si aspettano che verifichiamo che siano ancora membri validi), concordo che ridurli troppo possa essere problematico.
L’ultima proposta (trovare un modo per disconnetterli da Discourse quando la membership scade) è quella che rechercherò. Avevo visto l’opzione di disconnessione manuale, ma sto cercando di automatizzare completamente tutto questo, quindi sembra la strada giusta da seguire.
Hmm… la descrizione dell’impostazione del sito dice (enfasi mia):
L’utente rimarrà connesso per n ore dall’ultima visita
Se ho capito bene, potrebbe rimanere connesso per sempre se continua a visitare il sito periodicamente, anche dopo aver perso le credenziali SSO. Ad esempio, se l’impostazione fosse impostata su 72 ore, purché continuasse a visitare il sito ogni giorno o due, rimarrebbe connesso. Ho interpretato correttamente?
Quindi, l’implicazione è che, se qualcuno cancella la mia iscrizione e voglio essere sicuro che non possa più accedere al mio forum, dovrò disconnetterli forzatamente (manualmente o tramite una chiamata API)?
Grazie. Essendo passato da un gruppo Facebook (che richiedeva la rimozione manuale dei membri quando disdicevano l’abbonamento), è un peccato che con Discourse debba ancora gestire un processo manuale per impedire ai membri che hanno cancellato l’abbonamento di accedere al forum. Questo mi porta a una domanda.
Esiste un meccanismo non manuale, per quanto creativo, per assicurarmi che un utente senza un account valido, ovvero che non può accedere, venga forzatamente disconnesso da Discourse?
Sembra logicamente strano che il meccanismo SSO blocchi gli accessi (riconoscendo che non hanno un account valido), ma se accedono al forum regolarmente (entro il timeout) possono rimanere connessi indefinitamente, finché non li disconnetto manualmente.
Immagino che la mia ultima opzione, potenzialmente, sia scrivere un plugin che chiami l’API di Discourse per disconnetterli quando cancellano l’abbonamento.
Sono aperto a qualsiasi idea. Come potete capire, VOGLIO DAVVERO evitare di doverlo fare manualmente
Tuttavia, ripensandoci, non sembra questo un problema? Immagino che si possa discutere dell’importanza di ciò, ma avere una piattaforma in cui gli utenti possono continuare ad accedere a un forum all’infinito, anche quando non hanno più un account valido, è qualcosa che non ho mai visto altrove.
Potrei forse accettare l’idea che sia WordPress, e non Discourse, a essere la fonte autorevole in questo caso. Questo probabilmente indica che il plugin SSO è il luogo migliore per inserire qualche logica.
Sono curioso di conoscere il ragionamento generale qui. Mi piacerebbe pensare che lo scenario sia valido (disconnettere automaticamente dopo un certo periodo di tempo o in base a un account WordPress diventato “non valido”), no?
Sto solo facendo brainstorming, poiché vorrei evitare passaggi manuali, ma anche evitare di scrivere codice, se possibile
Sì, questo dovrà essere gestito da WordPress. Penso che abbia senso che il plugin WP Discourse disconnetta gli utenti da Discourse quando vengono eliminati su WordPress, ma non sono sicuro che questo risolva il tuo problema. La mia ipotesi è che, quando l’iscrizione di un utente scade sul tuo sito, l’utente non venga eliminato dal tuo sito WordPress. Per gestire il caso in cui un utente venga disconnesso da Discourse quando la sua iscrizione scade, dovrai probabilmente aggiungere del codice al tuo sito che si agganci all’azione attivata dal tuo plugin di gestione delle iscrizioni al momento della scadenza.
Grazie ancora, @simon. I tuoi punti hanno senso, ma perdonami se continuo per un’ultima passata
Sembra che ci siano due fattori in gioco qui: la validità di un account (cioè, se l’utente è un membro attivo) e la validità di un token in Discourse.
Per il primo punto, sono assolutamente d’accordo che dovrebbe essere WordPress a gestirlo e, quando il tempo lo permetterà, mi occuperò di approfondire.
Tuttavia, c’è anche la questione di un token attivo/valido sul lato di Discourse. Capisco che questo potrebbe non essere una priorità alta, ma vedo una certa logica in un’opzione (probabilmente disattivata di default) che preveda un periodo di “forzatura dell’accesso”, ovvero dopo x giorni il token di accesso dell’utente scade, indipendentemente dal fatto che si sia effettuato l’accesso di recente.
Ancora una volta, sto solo facendo brainstorming, ma vedo un certo valore nell’offrire l’opzione di forzare il logout, indipendentemente dal fatto che l’utente abbia un account valido.
Devi effettuare una richiesta POST autenticata alla rotta. Potresti configurarlo in modo che gli utenti vengano disconnessi quando cliccano su un link, ma dovrai gestire la richiesta sul server.
Grazie! Autenticato, eh? Sto facendo alcune ricerche in merito e sembra che un post autenticato da PHP invii qualcosa del genere nell’header:
'Authorization: OAuth '.$accesstoken;
Ci sono alcuni indizi che continuerò a investigare.
Ma sarebbe fantastico se qualcuno avesse un frammento di codice PHP funzionante! L’esempio nella sezione autenticazione di https://docs.discourse.org/ mi restituisce un errore di sintassi… oh, aspetta, è un comando Unix!
Accolgo con piacere qualsiasi indizio che possa aiutare per PHP!
Dato che sei su WordPress, potresti provare a effettuare la richiesta con la funzione wp_remote_post. In questo modo non dovrai gestire le opzioni curl.