has_secure_password en e-mailverificatie

has_secure_password in rails works well for signing up users by checking :password and :password_confirmation then logging a :password_digest field in the database. However, if I want to be able to verify the email address (by sending an email confirmation) how would I be able to do this with rails?

2

3 antwoord

Over het algemeen om een ​​e-mailadres te verifiëren, stuurt u een e-mail naar het betrokken e-mailadres (met een link) en klikt de gebruiker op een koppeling/verifieert deze. De link bevat over het algemeen een token dat wordt gebruikt om dat e-mailadres uniek te identificeren. U kunt dus een veld verificatietool toevoegen aan uw model, mogelijk ook de velden verificatie_email_sent_at en geverifieerd_at toevoegen om de actie van een controller bij te houden en te gebruiken

   def verify_email
     @user = User.find_by_verification_token(params[:verification_token])
     if @user
        @user.verification_token = nil
        @user.verification_email_sent_at = nil
        @user.verified_at = Time.now
        @user.save
        # above lines can be part of method like @user.verify!
        redirect_to "/"
     else
        ...
     end
   end

Also I'd strongly suggest instead of building your authentication solution take a look at

https://github.com/plataformatec/devise

Het is vrij eenvoudig te gebruiken.

3
toegevoegd
hey Rishav, kun je opgeven hoe de link in de weergave moet worden gemaakt zodat het verificatietoken in de URL wordt verzonden? Dwz een pad zoals/users/23/verifyemail/34563 waarbij "23" het gebruikers-ID zou zijn en "34563" het verificatietoken waaraan het is toegewezen.
toegevoegd de auteur Myna, de bron
Ik stel voor tovenarij github.com/NoamB/sorcery , het is minder mammoet
toegevoegd de auteur mdesantis, de bron

Als u wilt toevoegen aan Rishav Rastogi , moet u ervoor zorgen dat u de juiste controle toevoegt om Controleer of de verificatieparameter zowel is opgeschoond als niet null (anders kan iemand die in een nultestificatietoken doorgaat toegang krijgen tot het account van een gebruiker wiens kolom verification_token nul is.

Het zou ook helpen om de kolom verified_at te gebruiken bij uw beveiligde controle.

(Ik kan geen commentaar geven op zijn antwoord wegens gebrek aan reputatie)

1
toegevoegd

Dit is een vrij grote vraag en ik weet niet zeker of dit iets te maken heeft met has_secure_password . De essentie is dat u een veld op uw gebruikersmodel wilt, bijvoorbeeld bevestigd , en een mailer maakt die de bevestigingsemail verstuurt, die een link naar een controller heeft die de gebruiker markeert als bevestigd.

Ik raad aan dat je de ActionMailer-handleiding bekijkt om aan de slag te gaan.

0
toegevoegd
Dit werkt niet !! Omdat has_secure_password niet toestaat om een ​​gebruikersobject te wijzigen zonder het wachtwoord en de wachtwoordbevestiging van de gebruiker te wijzigen ... Ik heb hetzelfde gedaan als beschreven door @rfunduk. En ik zit vast. Om het even welke ideeën?
toegevoegd de auteur Myna, de bron
Kunt u uw probleem herformuleren? has_secure_password heeft geen mening over de manier waarop u uw gebruikersobject wijzigt ... Als u wachtwoord wijzigt, moet u tegelijkertijd password_confirmation opgeven , dat is de enige vereiste die ik ken.
toegevoegd de auteur rfunduk, de bron