活动记录设置登录

时间:2015-07-24 01:42:39

标签: ruby-on-rails activerecord

这是我到目前为止所做的:

属于User类的Content类:

class Content < ActiveRecord::Base 
  belongs_to :user
end

以下是我的User类:

class User < ActiveRecord::Base
  has_many :contents
end

这就是我的schema.rb的样子:

ActiveRecord::Schema.define(version: 20150723165743) do

  create_table "contents", force: :cascade do |t|
    t.string   "content"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string  "username"
    t.string  "password"
    t.string  "email"
    t.integer "content_count"
  end

end

我在html中设置了一个post发送请求到application_controller.rb,这就是它的样子:

HTML:

<form action="/login" method="post" accept-charset="utf-8">
  <input type="text" name="username" placeholder="Username"/>
  <input type="password" name="password" placeholder="Password"/>
  <!-- <input type="hidden" name="login" value="true"/> -->
  <button type="submit">Login</button>
</form>

application_controller.rb

post '/signup' do
    @password=params[:password]
    @confirm_password=params[:confirm_password]
    @error=""

    if @password!=@confirm_password
      @error="passwords do not match"
    # elsif username is already taken
      # @error="username already exists"
    else
      @user= User.new({:username => params[:username], :password => params[:password], :email => params[:email]})
    end
    erb :welcome
  end

  post '/login' do
    @username=params[:username]
    @password=params[:password]
    # if user credentials are correct
    erb :index
    # else error message
    erb :login_error

我如何制作它以检查用户名是否与Users数据库中的密码匹配。

这是我发现放在User类中的内容,但我不知道如何使用它:

  def self.authenticate_safely_simply(user_name, password)
    where(user_name: user_name, password: password).first
  end

其次,如何让它返回user_id,以便我可以在下一页中使用它。我想在用户创建新内容时将其添加到用户在内容表中创建的内容中。

我希望我足够清楚。如果我不是,请告诉我。

非常感谢你。

1 个答案:

答案 0 :(得分:0)

存储纯文本密码是不安全的。您可以使用ActiveModel has_secure_password进行使用密码的安全身份验证。为了使用它,您需要在Gemfile中使用bcrypt-ruby gem,并且您的users表需要有一个名为password digest的字段。您可以找到完整的示例gist here