我正在按照本教程创建一个非常基本的登录会话:https://www.youtube.com/watch?v=Hw6WtWJwRtU
跟着导师完全按照他的方式做了什么我遇到了很多错误,可能是因为他使用了较旧的Rails版本。所以现在的问题是,当我尝试登录系统时实际上并没有登录我,而在创建用户后,会话也被创建,一切正常。 这是我的应用程序布局,显示用户是否已登录
<!DOCTYPE html>
<html>
<head>
<title>Fitit</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<% if current_user %>
<p>
Logges in as <%= current_user.username %>
<%= link_to "Log out", logout_path %>
</p>
<% else %>
<%= link_to "Sign Up", signup_path %>
<%#= link_to "Set Profile", profile_path %>
<%= link_to "Log In", login_path %>
<% end %>
<%= yield %>
</body>
</html>
然后有一个创建新会话的视图(请注意这部分代码有很多问题:&lt;%#= form_tag session_path do%&gt; - 使用的导师,导致错误并要求输入:id,我试图传递几乎任何东西。
<h1>Log In</h1>
<%#= form_tag session_path do %>
<%= form_tag({controller: "sessions", action: "create"}, method: "get") do %>
<div class="field">
<%= label_tag :username %><br/>
<%= text_field_tag :username, params[:username] %><br/>
</div>
<div class="field">
<%= label_tag :password %><br/>
<%= password_field_tag :password %><br/>
</div>
<div class="actions">
<%= submit_tag "Log In" %>
</div>
<% end %>
然后这是我的会话控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_username(params[:username])
respond_to do |format|
if user && user.authenticate(params[:password])
session[:user_id] = user.id
format.html { redirect_to :index, notice: 'Logged In successfully' }
format.json { render :index, status: :created, location: @session }
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
end
def destroy
session[:user_id] = nil
respond_to do |format|
format.html { redirect_to root_path, notice: 'Logged Out successfully' }
format.json { head :no_content }
end
end
end
我认为问题所在。并且只是比较实际创建会话的用户控制器的CREATE方法。
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
session[:user_id] = @user.id
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
路线:
Rails.application.routes.draw do
resources :sessions
resources :foods
resources :users do
resources :entries
end
post "log_in" => "sessions#new", :as => "log_in"
get "logout" => "sessions#destroy", :as => "logout"
get "login" => "sessions#new", :as => "login"
get "signup" => "users#new", :as => "signup"
root :to => 'users#new'
get "app/views/users/profile.html.erb", to: "users#profile", as: "profile"
end
有谁知道我在这里做错了什么?我已经尝试在第二天解决这个问题了。
答案 0 :(得分:0)
在form_tag上使用POST(默认值为1)而不是GET。
<%= form_tag({controller: "sessions", action: "create"}) do %>
因为在您的路由器文件中,行:
资源:会话
会产生类似的东西:
会话POST /sessions(。:format)sessions #create
#...