Witam
Dopiero zaczynam moja przygode w ROR, wczesniej programowalem w PHP i przyszedl czas na przepisanie modulu autentykacji/autoryzacji.
Mam nastepujacy kontroller:
[code]class AuthController < ApplicationController
before_filter :login_required, :only=>[‘change_password’, ‘hidden’]
def signup
@user = User.new(params[:user])
if request.post?
if @user.save
session[:user] = User.authenticate(@user.login, @user.password)
flash[:message] = “Rejestracja przebiegła pomyślnie!”
redirect_to :action => “welcome”
else
flash[:warning] = “Wystąpił błąd podczas rejestracji!”
end
end
end
end[/code]
i nastepujacy model:
[code]require ‘digest/sha1’
class User < ActiveRecord::Base
validates_length_of :login, :maximum => 40
validates_length_of :password, :minimum => 5
validates_presence_of :login, :email, :password, :password_confirmation
validates_uniqueness_of :login, :email
validates_confirmation_of :password
validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i, :message => ‘Wprowadzony adres email jest niepoprawny!’
attr_protected :id, :salt
ER_USER_NOT_EXISTS = 0
ER_BAD_PASSWORD = -1
def password=(pass)
@password=pass
self.salt = TextHelper.random_string(10) if !self.salt?
self.hashed_password = self.encrypt(@password, self.salt)
self.unique_hash = self.create_hash
end
def password
return @password
end
def encrypt(pass, salt)
return Digest::SHA1.hexdigest(pass + salt)
end
def authenticate(login, pass)
u = self.find(:first, :conditions => [‘login = ?’, login])
if u.nil?
return ER_USER_NOT_EXISTS
end
if self.encrypt(pass, u.salt) == u.hashed_password
return u
else
return ER_BAD_PASSWORD
end
nil
end
def create_hash
while 1
hash = TextHelper.random_string(40)
if !User.find(:first, :conditions => [‘unique_hash = ?’, hash])
return hash
end
end
end
end[/code]
po poprawnym wypelnieniu formularza ROR wywala mi nastepujacy blad:
[quote]NoMethodError in AuthController#signup
undefined method `authenticate’ for #Class:0xb6e99970[/quote]
Co robie nie tak? Czy to jest wina tego, ze nie utworzylem wczesniej obiektu User?