Rails Rancang token pengguna tamu

Ada aplikasi daftar hotel Rails dengan pengaturan Rancangan/CanCan

class HotelsController < ApplicationController
before_filter :authenticate_user!, except: [:show]
load_and_authorize_resource

1) Apa cara paling elegan yang memungkinkan pemilik mengedit informasi hotelnya tanpa mendaftarkannya sebagai pengguna?

2) Bagaimana jika kita membuat token unik untuk setiap hotel dan mengirimkan tautan berikut melalui email ke pemilik terkait:

http://myapp.io/hotels/10010/edit?token=AAAABBBBCCCCDDD

..bagaimana cara mengonfigurasi Rancangan/CanCan sehingga mereka mengautentikasi pengguna dan mengizinkan mereka mengedit catatan terkait di tabel Hotel?

Terima kasih sebelumnya!

Salam, Serge.


person Serge    schedule 31.10.2014    source sumber


Jawaban (1)


Solusi cepat dan kotor adalah dengan mengganti metode authenticate_user! dan menambahkan tanda centang untuk token:

# application_controller.rb
def authenticate_user!
  if (token = params[:token] || session[:token])
    @current_user = User.find_by_token token
    session[:token] = token if @current_user
  else
    super
  end
end

Pertama, Anda harus menambahkan kolom token ke tabel pengguna dan Anda masih perlu membuat pengguna untuk mereka. Buat token dan kirimkan tautan berisi token mereka melalui email. Ketika mereka pertama kali tiba di situs dengan token di URL, metode di atas akan memeriksa apakah ada catatan yang cocok di db dan menetapkannya sebagai current_user dan menyimpan token ke sesi sehingga permintaan berikutnya masih berfungsi. Jangan lupa untuk menghapus sesi itu nanti (logout atau kadaluwarsa).

Alasan Anda masih perlu membuat catatan pengguna adalah karena Anda tidak ingin mulai mengganti logika cancan dan Anda tetap memerlukan tempat untuk menyimpan token.

Ada juga beberapa permata yang akan menambahkan otentikasi token:

https://github.com/gonzalo-bulnes/simple_token_authentication

Dan solusi bawaan Rails sederhana:

http://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Token.html

person DiegoSalazar    schedule 31.10.2014
comment
Punya ide, masuk akal. Terima kasih banyak! - person Serge; 04.11.2014