用户会话和登录

时间:2015-06-13 14:53:37

标签: ruby-on-rails ruby-on-rails-4

我正在努力实施注册& ROR上的登录功能。在索引页面上,我创建了2个链接,说“新用户”和“登录”,在用户控制器中,我有注册&登录方法(相应地更新路线)。

问题:点击新用户或登录后,我收到错误

“无法找到UsersController的动作'show'”

routes.rb中:

Rails.application.routes.draw do

resources :users

get 'users/register', :to=>'users#register'
get 'users/signup', :to=>'users#signup'
post 'users/signup', :to=>'users#signup'
post 'users/login', :to=>'users#login'
get 'users/login', :to=>'users#login'
post "users/change_password" => "users#change_password"
get "users/change_password" => "users#change_password"

index.html.erb

<%= link_to "New User", users_register_path %><br>
<%= link_to "Login", users_login_path %><br>
<%= link_to "Change Password", users_change_password_path %><br>

userscontroller:

def index
  @user_details = User.all
end

def register
  puts "**********************"
  puts params
  @new_user = User.new
end

def signup
  @new_user = User.new(user_register)
  if @new_user.save
  session[:user] = User.authenticate(@user.name,@user.password)
  redirect_to :action=>"welcome"
 else
   redirect_to :action=>"login"
 end
end

def login
  puts params
  if request.post?
  session[:user] = User.authenticate(params[:user][:name],   params[:user][:password])
   redirect_to :action=>"welcome"
  else
  #  redirect_to :action=>"signup"
 end
end



 def change_password

   puts "**********************"
   puts params
   puts "**********************"

  if request.post?
  @pass_change = User.new_password(params[:user][:name], params[:user][:password], params[:user][:new_password])
 end
end

def welcome
 end


 def user_register
    params.require(:user).permit(:name,:email,:password,:password_confirmation)
 end

 end

usermodel.rb:

require 'digest/sha1'

class User < ActiveRecord::Base


 attr_accessor :password, :password_confirmation

 def password=(pass)
    @password = pass

   self.salt = User.random_met(10)
   self.hashedpassword = User.encrypt(@password, self.salt)
 end

  def self.encrypt(pass,salt)
     Digest::SHA1.hexdigest(pass+salt)
  end

  def self.authenticate(login, pass)
    user_auth = User.find(:first, :conditions=>["login = ?", login])
    return nil if user_auth.nil?
    return user_auth if     User.encrypt(pass,user_auth.salt)==user_auth.hashedpassword
  end


   def self.new_password(name,old,new)
      user = where(:name=>name)
      #puts user.email

     # how to call setter(password) method from here. because   My idea is
     #if User.encrypt(old, user.salt)==user.hashedpassword
     # run def password=(pass), thereby storing new password.
    end

  def self.random_met(len)
     char = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
     salted = ""
      1.upto(len) { |i| salted << char[rand(char.size-1)] }
    return salted
   end

  end

1 个答案:

答案 0 :(得分:0)

正如Guides所述,

  

Rails路由按照指定的顺序进行匹配,所以如果你   有一个资源:照片上面的照片/民意调查&#39;节目动作   资源行的路由将在获取行之前匹配。至   解决这个问题,将get行移到资源行上方,这样就可以了   首先匹配。

您已在 resources :users 上方定义 get routes ,因此rails会查找 show route 错误也是如此。