2017-02-05 1 views
0

Ich versuche, ng-Token-Auth (Angular 1) auf einem separaten Frontend zu verwenden, um Passwörter zurückgesetzt werden und Konto E-Mail-Adressen auf einem Ruby on Rails 5.0-Backend bestätigt werden.Wie werde ich mit der E-Mail-Bestätigung und dem Passwort-Reset-Link mit ng-token-auth und devise-token-auth zur richtigen URL weitergeleitet?

Nachdem ich auf den Link klicken, der die Authentifizierung api trifft ich diese umgeleitet bin immer:

http://localhost:8080/?client_id=<client_id>&config=default&expiry=<expiry_stamp>reset_password=true&token=<token>&uid=<email address>#/reset-password

Der /#/reset-password Teil ist am Ende des Reset-Link platziert zu werden.

denke ich, Winkel zu bekommen und meine Funktionen einwandfrei funktionieren muss ich etwas, das ähnelt: http://localhost:8080/#/reset-password?client_id=&config=&expiry=&reset_password=&token=&uid=

In app/views/devise/mailer/reset_password_instructions.html.erb Ich habe folgende Template-Code:

<p><%= t(:hello).capitalize %> <%= @resource.email %>!</p> 

    <p><%= t '.request_reset_link_msg' %></p> 

    <p><%= link_to t('.password_change_link'), edit_password_url(@resource, reset_password_token: @token, config: message['client-config'].to_s, redirect_url: message['redirect-url'].to_s).html_safe %></p> 


    <p><%= t '.ignore_mail_msg' %></p> 
    <p><%= t '.no_changes_msg' %></p> 

Innerhalb meiner app.js auf die Frontend, ich bin die Konfiguration $authProvider mit den folgenden:

function AuthSetup($authProvider) { 
    $authProvider.configure({ 
     apiUrl: 'http://localhost:3000', 
     passwordResetSuccessUrl: 'http://localhost:8080/#/reset-password' 
    }); 
    } 

ich würde gr Ich schätze jede Hilfe oder Anleitung, die jemand anbieten könnte. Vielen Dank.

+0

Sind Sie sicher, dass dieser Link von der Website und nicht von der E-Mail angeklickt werden soll? –

+0

Wenn Sie das Rails-Backend verwenden, lassen Sie diese Dinge von Devise für Sie erledigen. Sie sollten wahrscheinlich nur das 'user_id' /' User' Objekt an die jeweilige Aktion senden, die dann eine Email sendet..Lesen Sie hier für Details http://StackOverflow.com/a/41790443/2545197 – Abhinay

+0

@maxple Dies ist für Links, die sind per E-Mail gesendet werden. – Robert

Antwort

0

Entschuldigung für die späte Antwort. Was ich getan habe, ist nur überschreiben die Devise::ConfirmationController von Rails Backend und es hat für mich funktioniert.

den Code-Snippet teilt unter:

class User::ConfirmationsController < Devise::ConfirmationsController 

    def show 
    self.resource = resource_class.confirm_by_token(params[:confirmation_token]) 

    if resource.errors.empty? 
     set_flash_message(:notice, :confirmed) if is_navigational_format? 
     sign_in(resource_name, resource) 
     respond_with_navigational(resource){ redirect_to after_confirmation_path } 
    else 
     redirect_to after_confirmation_path, notice: 'Not a valid token' 
    end 
    end 

    protected 

    def after_confirmation_path 
    return 'http://localhost:4000' if Rails.env.dev? 
    'http://example.com' 
    end 
end 

Wenn das Token gültig ist, dann wird es Anmelde-Benutzer und leitet sie an Front-End-Seite, wo Sie Ihre Winkel Code ausgeführt wird, wenn Token nicht ist gültig dann wird es sie zusammen mit einer Flash-Nachricht zur Seite umleiten. Bitte lassen Sie mich wissen, wenn Sie Hilfe benötigen, um diesen Code zu verstehen.

Verwandte Themen