Create User Login

parent df25189d
Pipeline #882 failed with stages
in 0 seconds
...@@ -15,7 +15,7 @@ gem 'sass-rails', '~> 5.0' ...@@ -15,7 +15,7 @@ gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0' gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes # See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby # gem 'mini_racer', platforms: :ruby
gem 'bcrypt-ruby', '3.1.2'
# Use CoffeeScript for .coffee assets and views # Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2' gem 'coffee-rails', '~> 4.2'
gem 'mechanize', '~> 2.7.6' gem 'mechanize', '~> 2.7.6'
......
...@@ -48,6 +48,7 @@ GEM ...@@ -48,6 +48,7 @@ GEM
io-like (~> 0.3.0) io-like (~> 0.3.0)
arel (9.0.0) arel (9.0.0)
ast (2.4.1) ast (2.4.1)
bcrypt-ruby (3.1.2)
bindex (0.8.1) bindex (0.8.1)
bootsnap (1.4.6) bootsnap (1.4.6)
msgpack (~> 1.0) msgpack (~> 1.0)
...@@ -242,6 +243,7 @@ PLATFORMS ...@@ -242,6 +243,7 @@ PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
bcrypt-ruby (= 3.1.2)
bootsnap (>= 1.1.0) bootsnap (>= 1.1.0)
byebug byebug
capybara (>= 2.15) capybara (>= 2.15)
......
// Place all the styles related to the Jobs controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.email-field, .password-field, .forgot-pass-field, .login-btn, .regis-btn {
margin: 20px;
padding: 10px;
}
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
include SessionsHelper
end end
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email or password'
render 'new'
end
end
def destroy
sign_out
redirect_to root_path
end
end
class UsersController < ApplicationController
def index
end
def show
@user = User.find(params[:id])
end
end
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.digest(remember_token))
self.current_user = user
end
def signed_in?
current_user.present?
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.digest(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def sign_out
current_user.update_attribute(:remember_token, User.digest(User.new_remember_token))
cookies.delete(:remember_token)
self.current_user = nil
end
end
class User < ApplicationRecord class User < ApplicationRecord
before_save { self.email = email.downcase }
before_create :create_remember_token
has_many :favorite_jobs has_many :favorite_jobs
has_many :jobs, through: :favorite_jobs has_many :jobs, through: :favorite_jobs
has_many :job_applieds has_many :job_applieds
has_many :jobs, through: :job_applieds has_many :jobs, through: :job_applieds
has_many :histories has_many :histories
has_many :jobs, through: :histories has_many :jobs, through: :histories
has_secure_password
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.digest(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = User.digest(User.new_remember_token)
end
end end
...@@ -4,7 +4,11 @@ ...@@ -4,7 +4,11 @@
<%= link_to image_tag("logo_venjob.png", alt: "Logo", id: "logo_venjob", width: 120), root_path %> <%= link_to image_tag("logo_venjob.png", alt: "Logo", id: "logo_venjob", width: 120), root_path %>
<nav> <nav>
<ul class="navbar-nav mr-auto"> <ul class="navbar-nav mr-auto">
<li><%= link_to "Login", '#' , class: "nav-item nav-link" %></li> <% if signed_in? %>
<li><%= link_to "Log Out", logout_path , class: "nav-item nav-link", method: "delete" %></li>
<% else %>
<li><%= link_to "Log In", login_path , class: "nav-item nav-link" %></li>
<% end %>
<li><%= link_to "Register", '#', class: "nav-item nav-link" %></li> <li><%= link_to "Register", '#', class: "nav-item nav-link" %></li>
<li><%= link_to "Favorite", '#', class: "nav-item nav-link" %></li> <li><%= link_to "Favorite", '#', class: "nav-item nav-link" %></li>
<li><%= link_to "History", '#', class: "nav-item nav-link" %></li> <li><%= link_to "History", '#', class: "nav-item nav-link" %></li>
......
<% provide(:title, "Sign In") %>
<div class="container">
<div class="flash-login rounded">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
</div>
<h1 class="text-center">Login</h1>
<div class="form-login">
<div class="row form d-flex justify-content-center">
<%= form_for(:session, url: sessions_path) do |f| %>
<div class="email-field">
<div class="col-4-sm">
<%= f.label :email %>:
</div>
<div class="col-8-sm">
<%= f.text_field :email %>
</div>
</div>
<div class="password-field">
<div class="col-4-sm">
<%= f.label :password %>:
</div>
<div class="col-8-sm">
<%= f.password_field :password %>
</div>
</div>
<div class="col-6-sm forgot-pass-field">
<%= link_to 'Forgot password?', '#' %>
</div>
<%= f.submit "Login", class: 'btn btn-outline-primary btn-lg login-btn' %>
<%= link_to 'Register', '#', class: 'btn btn-outline-info btn-lg regis-btn' %>
<% end %>
</div>
</div>
</div>
<div class="container">
<%= @user.name %>
</div>
Rails.application.routes.draw do Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/login', to: 'sessions#new', via: 'get', as: :login
match '/logout', to: 'sessions#destroy', via: 'delete', as: :logout
resources :jobs resources :jobs
resources :top_pages resources :top_pages
resources :industries resources :industries
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment