разработать аутентификацию через скрипт ruby - PullRequest
1 голос
/ 01 августа 2011

У меня небольшое приложение, и у меня будет несколько внешних приложений, передающих данные в этот сервис через http с остальными. У меня уже работает, но без аутентификации. В портале я использую devise, и мой вопрос таков: как (желаемый пример) пройти аутентификацию на портале на уровне сценария ruby? Что добавить в следующий скрипт для аутентификации в первую очередь? Я хочу защитить этот контроллер с помощью devise, а затем мне нужна часть аутентификации для следующего скрипта.

require "net/http"
require "json"

@host = "localhost"
@port = 3000
@post_ws = "/external/rd"

@req_body = {
"device" => {
  "name" => "device_json", 
  "operating_system_id" => "7", 
  "hash_string" => "jfsg3k4ovj0j02jv", 
  "user_id" => "1"
}
}.to_json

req = Net::HTTP::Post.new(@post_ws, initheader = {'Content-Type' =>'application/json'})
req.body = @req_body
response = Net::HTTP.new(@host, @port).start {|http| http.request(req) }

С уважением, Матеуш

1 Ответ

4 голосов
/ 04 августа 2011

Вот решение:

Я использовал token_authenticatable от устройства.

Здесь - это отличный ответ, как реализовать его с помощью json. У меня были некоторые проблемы и я описал их в этом вопросе . Также есть ответ.

Вот пример кода:

require "net/http"
require "json"

@host = "localhost"
@port = 3000
@post_sign = "/users/sign_in.json"
@post_ws = "/external/rd"

@req_sign = {
"user" => {
  "email" => "some@email.com", 
  "password" => "123456" 
}
}.to_json

sig = Net::HTTP::Post.new(@post_sign, initheader = {'Content-Type' => 'application/json'})
sig.body = @req_sign


http = Net::HTTP.new(@host, @port).start
resp1 = http.request(sig)
puts "Response: #{resp1.code} , Message: #{resp1.message} , Body: #{resp1.body}"

if resp1.code == "200" then 
  puts "logged in"
  json_resp = JSON.parse(resp1.body)
  @auth_token = json_resp['auth_token']

  @req_body = {
  "device" => {
    "name" => "device_json", 
    "operating_system_id" => "7", 
    "hash_string" => "jfsg3k4ovj0j02jv" 
  }, 
  "auth_token" => @auth_token 
  }.to_json
  req = Net::HTTP::Post.new(@post_ws, initheader = {'Content-Type' =>'application/json'})
  req.body = @req_body

  response = http.request(req)
  puts "Response: #{response.code} , Message: #{response.message} , Body: #{response.body}"
end

С уважением, Матеуш

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...