2013-08-02 20 views
11

RoR'a yeni geldim ve bu sorunla uğraştım. Kullanıcıların e-posta ile oturum açmasına izin vermek VEYA kullanıcı adı (kullanıcı adıyla kayıt zaten tamam). Article 1 ve Article 2 ve aşağıda sonucu görebilirsiniz:Raylar 4 + Devise E-posta adresleri veya kullanıcı adları ve güçlü parametreler ile giriş yapın

application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) } 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login] 

    validates_uniqueness_of :username 
    validates_presence_of :username 
    validates :username, length: { in: 4..20 } 

    def self.find_first_by_auth_conditions(warden_conditions) 
    conditions = warden_conditions.dup 
    if login = conditions.delete(:login) 
     where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first 
    else 
     where(conditions).first 
    end 
    end  
end 

new.html.erb

ben bu makaleleri takip

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :login, "Pseudo ou email" %><br /> 
    <%= f.text_field :login, :autofocus => true %></div> 
... 

devise.rb

... config.authentication_keys =: çünkü çalışmıyor neden anlamıyorum

Showing /home/action/workspace/rchq/app/views/devise/sessions/new.html.erb where line #5 raised: 

undefined method `login' for #<User:0x000000033996a0> 

[giriş] ...

sonuç "Sign_in" izni için şunu belirttim: Kullanıcı girişi.

cevap

8

sorun alanıyla olan "giriş", :authentication_keys => [:login] kaldırmak ve User modelinde attr_accessor :login ekleyin.

+2

Çok teşekkürler, sadece attr_accessor ekleyerek çalışır: Giriş! Rails 4. – Dragu

+0

nope, attr_accessible kullanımdan kaldırıldığından "attr_accessor" un güçlü parametrelerle değiştirildiğini düşündüm. işte daha fazlası: http://stackoverflow.com/questions/3136420/difference-between-attr-accessor-and-attr-accessible – rb512

+0

@Dragu 'attr_accessible', güçlü parametrelerle değiştirildi. attr_accessor, setter/getter yöntemlerini, bu durumda 'login'i yaratır. Ayrıca '@ login'in bir örnek değişkeni yaratıyor – scarver2

İlgili konular