2016-10-31 2 views
0

У меня есть рельсы приложение, и когда я пытаюсь войти в систему (я создал пользователя с именем «тест») Я вижу это в консоли:Рельсы пользователь Войти в ноль

Parameters: {"utf8"=>"✓", "authenticity_token"=>"tlKwtMBNJ4LzJuJq13bUscAGpumdr+HVmUlGlfIudT9032DMXNxqa0d2VCxCvDZRDe1D6pFfaTafSRiL6tUvhw==", "session"=>{"login"=>"", "password"=>"[FILTERED]"}, "commit"=>"Log in"} 
    User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`login` IS NULL LIMIT 1 

Я вижу, что в параметрах сеанса приложение не может получить вход пользователя (и, возможно, пароль тоже). Ниже приведены мои пользовательские и сеансовые контроллеры:

class UsersController < ApplicationController 
    before_action :require_admin 
    def new 
     @users = User.new 
    end 
    def create 
     @user = User.new(user_params) 
     if @user.save 
      session[:user_id] = @user.id 
      current_user = @user.id 

      redirect_to @user 
     else 
      redirect_to '/login' 
     end 
    end 
    private 
    def user_params 
     params.require(:user).permit(:first_name, :last_name, :email, :login) 
    end 
end 

контроллера Session:

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
     @user = User.find_by_login(params[:login]) 
     if @user && @user.authenticate(params[:password]) 
      session[:user_id] = @user.id 
      redirect_to '/' 
     else 
      flash[:error] = 'err' 
      redirect_to '/login' 
     end 
    end 

    def destroy 
     session[:user_id] = nil 
     redirect_to root_url 
    end 
end 

Я также протестировал создание пользователя и запись в базе данных. @update вот мой взгляд на форму входа

<%= form_for(:session, url: login_path) do |f| %> 
        <div class="hidden-sm hidden-xs col-md-12 col-lg-12 "> 
         <%= f.text_field :login, :placeholder => "login" %> 
         <%= f.password_field :password, :placeholder => "password" %> 
         <%= f.submit "Log in", class: "btn-submit"%> 
        </div> 

ответ

0

Вы вложенный хэш в ваших Params (login пар под session ключа). Попробуйте

def create 
    @user = User.find_by_login(params[:session][:login]) 
    if @user && @user.authenticate(params[:session][:password]) 
    session[:user_id] = @user.id 
    redirect_to '/' 
    else 
    flash[:error] = 'err' 
    redirect_to '/login' 
    end 
end 

Кроме того, в вашем примере login паров пусты - я предполагаю, что это не подается из формы.

@update: используя тэг формы

<%= form_tag login_path, method: :post do %> 
    <div class="hidden-sm hidden-xs col-md-12 col-lg-12 "> 
    <%= text_field_tag :login, :placeholder => "login" %> 
    <%= password_field_tag :password, :placeholder => "password" %> 
    <%= submit_tag "Log in", class: "btn-submit"%> 
    </div> 
<% end %> 

и метод создания (с PARAMS не вложен больше):

def create 
    @user = User.find_by_login(params[:login]) 
    if @user && @user.authenticate(params[:password]) 
    session[:user_id] = @user.id 
    redirect_to '/' 
    else 
    flash[:error] = 'err' 
    redirect_to '/login' 
    end 
end 
+0

Хорошо это все еще не работает - я использую form_for в сессиях # новый взгляд, должен ли я попробовать другой метод? – andrey

+0

Я поставил свои сеансы/новое представление в своем сообщении – andrey

+0

Я думаю, это должно сработать, но я обновил свой ответ с помощью примера 'form_tag' Просто проверка работоспособности - когда вы вводите smth в поле входа и нажимаете' submit' - какой сервер params получает? –

Смежные вопросы