0
로그인 할 때 세션이 작동하고 로그 아웃 할 수 있습니다. 그러나 계정을 만들면 로그 아웃 할 수있는 링크가 없습니다. 어떤 제안? 여기 로그인시 세션 처리
은/application.html.erb 레이아웃을 로그 아웃하기위한 코드 여기<!DOCTYPE html>
<html>
<head>
<title>Auth</title>
<%= stylesheet_link_tag "application", media: "all",
"data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
<body>
<!--Detta kod säger bara när du loggar in ska man kunna se länkarna... du måste skriva om den så att den säger bara
när du är inloggad ELLER skapat konto visa dessa länkar-->
<div id="user_nav">
<% if current_user %>
Logged in as <%= current_user.email %> DETTA ÄR APPLICATION.HTML.ERB.
<%= link_to "Log out", log_out_path %>
<% else %>
<%= link_to "Sign up", sign_up_path %> or
<%= link_to "log in", log_in_path %>
<% end %>
</div>
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<% end %>
<%= yield %>
</body>
</html>
여기
class SessionsController < ApplicationController
#auth
#behöver new defineras? ska den vara tom? varför måste den finnas? ny session?
#är det korrekt att skriva params[:blabla] etc?
#varför kickar sessions in bara när man loggar in? och inte när man skapat konto?
def new
end
#det känns som sessions skapas bara när man loggar in.. AKA AUTHENTICATE
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to testsida_url, notice: "Logged in!"
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, :notice => "Logged out!"
end
end
사용자 제어기 여기
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to testsida_url, :notice => "Signed up!"
else
render "new"
end
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
이다 sessions_controller 인 애플리케이션 컨트롤러
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
helper_method :current_user
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def authorize
redirect_to login_url, alert: "Not authorized" if current_user.nil?
end
end
그래서 계정을 만들 때 세션이 작동하지 않는 이유를 알지만 로그인 할 때 작동합니까? : S
예, 로그인 할 때 세션에서 ID를 설정해야합니다. – Ahmed
좋습니다. id는 어떻게 설정합니까? 그 코드는 어떻게 생겼을까요? –
내 코드에서 주석 아래에있는 줄은'session [: user_id] = user.id'입니다. –