2016-08-11 2 views
0

Ich arbeite an einer Blog-Website in RoR geschrieben und stecken auf ein Problem mit Sorcery. Ich habe das Tutorial aus ihrer Dokumentation erstellt, um den einfachen Login zu erstellen. Mein Problem ist, dass sie E-Mail verwenden, um den Benutzer bei der Anmeldung zu identifizieren.Sorcery Simple Login mit Benutzername

Also habe ich versucht, meinen Session-Controller zu ändern, um den Benutzernamen als Parameter anstelle von E-Mail senden und änderte meine Ansicht entsprechend.

Das Protokoll sagt, dass alles gut funktioniert und der Benutzername und das Passwort an die Datenbank übergeben wird. Aber, und ich kann keine Lösung dafür finden, die SQL-Zeichenfolge, die generiert wird, verwendet immer noch "Autoren". "E-Mail" als Parameter.

Wie kann ich das beheben?

Mein log:

Processing by AuthorSessionsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ForXjJMiPCI6H37xqtPzGwa9XBOHx1yIaGjlZdUd6Iw+G4M5v6s/JXrFcGG5VVyuFl6Is+cr5Zp/fxJcNyS/Tw==", "username"=>"Test", "password"=>"[FILTERED]", "commit"=>"Login"} 
Author Load (0.5ms)  SELECT  "authors".* FROM "authors" WHERE "authors"."email" = 'Test' ORDER BY "authors"."id" ASC LIMIT ?  [["LIMIT", 1]] 
Rendering author_sessions/new.html.erb within layouts/application 
Rendered author_sessions/new.html.erb within layouts/application (2.4ms) 
Completed 200 OK in 63ms (Views: 49.6ms | ActiveRecord: 2.5ms) 

Meine Sitzungssteuerung:

class AuthorSessionsController < ApplicationController 
    def new 
    end 

    def create 
    if login(params[:username], params[:password]) 
     redirect_back_or_to(articles_path, notice: 'Logged in successfully.') 
    else 
     flash.alert = 'Login failed.' 
     render action: :new 
    end 
    end 

    def destroy 
    logout 
    redirect_to(articles_path, notice: 'Logged out!') 
    end 
end 

Mein new.html.erb

<h1>Login</h1> 

<%= form_tag author_sessions_path, method: :post do %> 
<div class="field"> 
    <%= label_tag :username %> 
    <%= text_field_tag :username %> 
    <br> 
</div> 
<div class="field"> 
    <%= label_tag :password %> 
    <%= password_field_tag :password %> 
    <br> 
</div> 
<div class="actions"> 
    <%= submit_tag 'Login' %> 
</div> 
<% end %> 

<%= link_to 'Back', articles_path %> 

Antwort

1

Ich habe das gleiche Problem auftritt, und die folgenden geholfen: - Wenn du Zauberei (rails g scorery: install) in der Migrationsdatei installierst, ändere das: email to: use RNAME so dass es wie dieses

class SorceryCore < ActiveRecord::Migration[5.0] 
     def change 
     create_table :users do |t| 
      t.string :username,   :null => false 
      t.string :crypted_password 
      t.string :salt 

      t.timestamps    :null => false 
     end 

     add_index :users, :username, unique: true 
     end 
    end 
  • dann rake db:migrate so hatte ich ein Benutzermodell
  • Ich sah Sie die users_sessions bereits, so können überspringen die rails generate controller UserSessions new create destroy und bevölkern die Ansichten Teil
  • in meinem aussehen würde users_sessions_controller.rb Datei an der Aktion erstelle ich auch login(params[:username], params[:password]) nennen, die eine Hexerei Methode ist und standardmäßig dauert es :email als username_attribute
  • , dass zu :username ändern Ich ging zu der /config/initializers/sorcery.rb und fand eine config.user_config do |user| Linie (um Linie 188), und fügte user.username_attribute_names = [:username] hinzu, so dass anstelle der E-Mail, würde es Benutzernamen nehmen.

Dies löste es für mich. Vergessen Sie nicht, die :email zu :username überall dort zu ändern, wo Sie es verwenden.

Verwandte Themen