这是我到目前为止所做的:
属于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,以便我可以在下一页中使用它。我想在用户创建新内容时将其添加到用户在内容表中创建的内容中。
我希望我足够清楚。如果我不是,请告诉我。
非常感谢你。
答案 0 :(得分:0)
存储纯文本密码是不安全的。您可以使用ActiveModel has_secure_password
进行使用密码的安全身份验证。为了使用它,您需要在Gemfile中使用bcrypt-ruby gem,并且您的users表需要有一个名为password digest的字段。您可以找到完整的示例gist here