create Sign Up user

parent fe8b0e2d
Pipeline #963 failed with stages
in 0 seconds
......@@ -2,11 +2,11 @@
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.email-field, .password-field, .name-field, .forgot-pass-field, .cv-field, .new-password-field, .old-password-field {
.email-field, .password-field, .name-field, .forgot-pass-field, .cv-field, .new-password-field, .old-password-field, .password-confirmation-field {
margin: 20px;
padding: 10px;
}
.input-email, .input-name, .input-cv, .input-new-password, .input-password {
.input-email, .input-name, .input-cv, .input-new-password, .input-password, .input-password-confirmation {
width: 300px;
}
.login-btn, .regis-btn, .update-btn, .my-jobs-btn {
......
class ConfirmationsController < ApplicationController
def new
@user = Confirmation.new
end
def create
@user = Confirmation.new(email: params[:confirmation][:email].downcase)
user_email = User.find_by(email: params[:confirmation][:email].downcase)
if user_email.blank?
return respond_to { |format| format.js } unless @user.save
ConfirmationMailer.register_email(params[:confirmation][:email].downcase, @user.confirm_token).deliver_later
redirect_to mail_register_path
else
flash[:danger] = 'Email existed. Please change !!!'
redirect_to register_path
end
end
end
......@@ -17,21 +17,18 @@ class UsersController < ApplicationController
end
end
def new
@email = User.new
def mail_register
end
def create
@email = User.new(email: params[:user][:email])
if @email.save
UserMailer.register_email(params[:user][:email]).deliver_later
redirect_to mail_register_path
else
redirect_to register_begin_path
end
def registation
@email = Confirmation.find_by(confirm_token: params[:confirm_token])
@user = User.new
end
def mail_register
def create
@user = User.new(sign_up_params)
return respond_to { |format| format.js } unless @user.save
redirect_to my_page_path
end
private
......@@ -50,4 +47,8 @@ class UsersController < ApplicationController
def change_pass_param
params.require(:user).permit(:new_password)
end
def sign_up_params
params.require(:user).permit(:name, :email, :cv_user, :password, :password_confirmation)
end
end
class UserMailer < ActionMailer::Base
def register_email(email)
class ConfirmationMailer < ActionMailer::Base
def register_email(email, confirm_token)
@email = email
@confirm_token = confirm_token
mail(to: @email, subject: 'Welcome To VeNJOB! Confirm Your Email')
end
end
class Confirmation < ApplicationRecord
before_save { self.email = email.downcase }
before_create :create_confirm_token
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 200 },
format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
def self.confirm_token
SecureRandom.urlsafe_base64
end
def self.digest(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_confirm_token
self.confirm_token = Confirmation.digest(Confirmation.confirm_token)
end
end
......@@ -12,13 +12,14 @@ class User < ApplicationRecord
has_secure_password
validates :name, presence: true, length: { maximum: 50 }
validates :name, presence: true, length: { maximum: 200 }
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 :email, presence: true, length: { maximum: 200 },
format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
PASSWORD_FORMAT = /\A(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/x
PASSWORD_FORMAT = /\A(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/x
validates :password, format: { with: PASSWORD_FORMAT, message: "is too short or not strength" }
validates :password_confirmation, presence: true
def self.new_remember_token
SecureRandom.urlsafe_base64
......
......@@ -6,6 +6,7 @@
<h1>Welcome <%= @email %></h1>
<p>You're on your way!</p>
<p>Let's confirm your email address.</p>
<p>By clicking on the following link, you are confirming your email address and agreeing to VeNJOB's Terms of Service</p>.
<p>By clicking on the following link, you are confirming your email address and agreeing to VeNJOB's Terms of Service.</p>
<p><%= link_to 'Confirm Email', registation_url(confirm_token: @confirm_token) %></p>
</body>
</html>
$(".validation").html("<%=escape_javascript render(partial: 'shared/error_messages') %>");
......@@ -3,7 +3,7 @@
<strong>Register</strong>
</div>
<div class="row">
<div class="text-center waiting-text">
<div class="text-center waiting-text col-12">
Thank you for register our service, an confirmation email with registration link<br>
has been sent to your email. Please check your email within 24 hours.<br>
Please note that the registration link is only valid for 24 hours.<br>
......
<div class="container">
<%= render 'layouts/flash' %>
<div class="text-center label">
<strong>Register</strong>
</div>
<div class="form-register">
<%= form_for(@email) do |f| %>
<%= form_for(@user, remote: true) do |f| %>
<div class="validation"></div>
<div class="text-center email-input">
<strong>Email</strong>
<%= f.text_field :email %>
</div>
<div class="text-center confirm-email-btn">
<%= f.submit 'Confirm your email', class: 'btn btn-outline-danger confirm font-weight-bold' %>
</div>
......
$(".validation").html("<%=escape_javascript render(:partial => 'shared/error_messages') %>");
<div class="container">
<h1 class="text-center my-page-label">Register</h1>
<div class="form-login">
<div class="row form d-flex justify-content-center">
<%= form_for(@user, remote: true) do |f| %>
<div class="validation"></div>
<div class="email-field">
<div class="col-4-sm">
<%= f.label :email %>
</div>
<div class="col-8-sm">
<%= f.text_field :email, class: 'input-email', value: @email.email %>
</div>
</div>
<div class="name-field">
<div class="col-4-sm">
<%= f.label :name, 'Full Name' %>
</div>
<div class="col-8-sm">
<%= f.text_field :name, class: 'input-name' %>
</div>
</div>
<div class="password-field">
<div class="col-4-sm">
<%= f.label :password, 'Password' %>
</div>
<div class="col-8-sm">
<%= f.password_field :password, class: 'input-password' %>
</div>
</div>
<div class="password-confirmation-field">
<div class="col-4-sm">
<%= f.label :password_confirmation, 'Password Confirmation' %>
</div>
<div class="col-8-sm">
<%= f.password_field :password_confirmation, class: 'input-password-confirmation' %>
</div>
</div>
<div class="cv-field">
<div class="col-4-sm">
<%= f.label :cv_user, 'My CV' %>
</div>
<div class="col-8-sm">
<%= f.file_field :cv_user, accept: '.doc, .pdf, .xls, .xlsx, .zip',class: 'input-cv' %>
</div>
</div>
<%= f.submit 'Register', class: 'btn btn-outline-primary btn-lg update-btn' %>
<% end %>
</div>
</div>
</div>
......@@ -10,6 +10,12 @@ module Venjob
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
config.before_configuration do
env_file = File.join(Rails.root, 'config', 'local_env.gitignore.yml')
YAML.load(File.open(env_file)).each do |key, value|
ENV[key.to_s] = value
end if File.exists?(env_file)
end
# config.filter_parameter_logging << :oldpassword, :password
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
......
......@@ -42,8 +42,8 @@ Rails.application.configure do
address: "smtp.gmail.com",
port: 587,
domain: "localhost:3000",
user_name: "phuoc2811006@gmail.com",
password: "Phuoc123",
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: "plain",
enable_starttls_auto: true
}
......
# Add account settings and API keys here.
# This file should be listed in .gitignore to keep your settings secret!
# Each entry gets set as a local environment variable.
# This file overrides ENV variables in the Unix shell.
# For example, setting:
# GMAIL_USERNAME: 'Your_Gmail_Username'
# makes 'Your_Gmail_Username' available as ENV["GMAIL_USERNAME"]
GMAIL_USERNAME: 'phuoc2811006@gmail.com'
GMAIL_PASSWORD: 'Phuoc123'
......@@ -8,8 +8,10 @@ Rails.application.routes.draw do
get '/login', to: 'sessions#new', as: :login
delete '/logout', to: 'sessions#destroy', as: :logout
get '/register/1', to: 'users#new', as: :register
get '/register/2', to: 'users#mail_register', as: :mail_register
get '/register/1', to: 'confirmations#new', as: :register
get '/register/2', to: 'confirmations#mail_register', as: :mail_register
get '/registation/3code=:confirm_token', to: 'users#registation', as: :registation
resources :jobs
get 'detail/:id', to: 'jobs#show', as: :job_detail
......@@ -18,9 +20,11 @@ Rails.application.routes.draw do
get 'jobs/industry/:converted_name', to: 'jobs#industry_jobs', as: :industry_jobs
get 'jobs/company/:converted_name', to: 'jobs#company_jobs', as: :company_jobs
resources :confirmations
resources :top_pages
resources :industries
resources :cities
root to: "top_pages#index"
end
class CreateJobs < ActiveRecord::Migration[5.2]
def change
create_table :jobs, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :jobs, options: 'COLLATE=utf8_general_ci' do |t|
t.string :title
t.text :description
t.string :level
......
class CreateCities < ActiveRecord::Migration[5.2]
def change
create_table :cities, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :cities, options: 'COLLATE=utf8_general_ci' do |t|
t.string :name
t.boolean :location
t.string :converted_name
......
class CreateCityJobs < ActiveRecord::Migration[5.2]
def change
create_table :city_jobs, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :city_jobs, options: 'COLLATE=utf8_general_ci' do |t|
t.timestamps
end
end
......
class CreateIndustries < ActiveRecord::Migration[5.2]
def change
create_table :industries, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :industries, options: 'COLLATE=utf8_general_ci' do |t|
t.string :name
t.string :converted_name
......
class CreateIndustryJobs < ActiveRecord::Migration[5.2]
def change
create_table :industry_jobs, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :industry_jobs, options: 'COLLATE=utf8_general_ci' do |t|
t.timestamps
end
......
class CreateCompanies < ActiveRecord::Migration[5.2]
def change
create_table :companies, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :companies, options: 'COLLATE=utf8_general_ci' do |t|
t.string :name
t.text :address
t.text :introduction
......
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :users, options: 'COLLATE=utf8_general_ci' do |t|
t.string :name
t.string :email
t.string :password_digest
......
class CreateJobApplieds < ActiveRecord::Migration[5.2]
def change
create_table :job_applieds, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :job_applieds, options: 'COLLATE=utf8_general_ci' do |t|
t.string :name
t.string :email
t.text :cv_user
t.timestamps
end
end
......
class CreateHistories < ActiveRecord::Migration[5.2]
def change
create_table :histories, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :histories, options: 'COLLATE=utf8_general_ci' do |t|
t.timestamps
end
......
class CreateFavoriteJobs < ActiveRecord::Migration[5.2]
def change
create_table :favorite_jobs, :options => 'COLLATE=utf8_general_ci' do |t|
create_table :favorite_jobs, options: 'COLLATE=utf8_general_ci' do |t|
t.timestamps
end
......
class CreateConfirmation < ActiveRecord::Migration[5.2]
def change
create_table :confirmations, options: 'COLLATE=utf8_general_ci' do |t|
t.string :email
t.string :confirm_token
t.timestamps
end
end
end
......@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2020_07_15_035356) do
ActiveRecord::Schema.define(version: 2020_08_19_053159) do
create_table "cities", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.string "name"
......@@ -36,6 +36,13 @@ ActiveRecord::Schema.define(version: 2020_07_15_035356) do
t.datetime "updated_at", null: false
end
create_table "confirmations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.string "email"
t.string "confirm_token"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "favorite_jobs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
......
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