Я пытаюсь внедрить регистрацию & функций входа в ROR. на странице Index я создал 2 ссылки, в которых говорилось «новый пользователь» и «логин», а в usercontroller у меня есть учетная запись & методов входа (соответственно обновлены маршруты).Пользовательские сеансы и логины
проб: при нажатии нового пользователя или логин я получаю сообщение об ошибке говорящее
"Действие 'шоу' не может быть найдено для UsersController"
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
При нажатии на ссылку 'link' появляется' ошибка'? – Pavan
все ссылки. новый пользователь, войдите в систему – user3484925
Попробуйте удалить 'resources: users' вверху и добавить его последним в ваш' routes.rb' – Pavan