Api projeme nasıl giriş yapabilirim

Öncelikle herkese iyi forumlar.
Ruby on Rails ile bir proje yapıyorum ve bu projenin ufak bir kısmını api olarak kullanmak istiyorum.

Yapmak istediğim şey api işlemlerine başlamadan önce kullanıcının giriş yapması ve bu girişi yapmadan işlemlerin yapılamaması.

Bunun için kullanıcı giriş yaparken session ve cookies kullandım fakat giriş yaptıktan sonra burada kayıtlı kullanıcıyı bulamıyorum.

Kodlarım:
ApiController.rb:

class ApiController < ApplicationController
	skip_before_action :verify_authenticity_token

	before_action except:%i[ deneme create ] do
		unless signed_in?
			render json:{message:"Lütfen giriş yapın"}
		end
	end

	def new

	end

	# FIXME burası silinecek
	def deneme
		render json:{user_id:cookies[:api_user_id]}
	end
	#

	def create
    	user = ApiUser.find_by_username(params[:username])

    	if user && user.authenticate(params[:password])
			cookies[:api_user_id] = user.id
			render json:{message:cookies[:api_user_id]}
		else
			render json:{message:"False"}
		end
  	end

	private
	
	def current_user
		@api_current_user ||= ApiUser.find(cookies[:api_user_id]) if cookies[:api_user_id] && ApiUser.exists?(cookies[:api_user_id])
	end

	def signed_in?
		current_user
	end
end

Gönderdiğim requests:

require "httparty"

HTTParty.get("http://localhost:3000/api")
# Çıktısı => {message:"Lütfen giriş yapınız"}

HTTParty.post("http://localhost:3000/api",:body => {username:"Geçerli kullanıcı adı",password:"Geçerli bcrypt ile şifrelenmiş şifre"})
# Çıktısı => {message:"giriş yapılan kullanıcının id'si"}

HTTParty.get("http://localhost:3000/api/deneme")
# Çıktısı => {user_id:nil} Sorun burada

Yardımcı olucak hocalarıma şimdiden teşekkürler.

Cok fazla cookie’lerle ugrasmiyorum o yuzden yanlis yonlendirmek istemem ancak:

Senin kodlarin ile alakali
Yazdigin kodlar icinde:
HTTParty.get("http://localhost:3000/api/deneme")
kullanarak
render json:{user_id:cookies[:api_user_id]}
ile cevap vererek
{user_id:nil} cevabini vermesi gayet normal, cunku

render json:{user_id:cookies[:api_user_id]} cookies[:api_user_id] zaten senin gondermen gereken birsey. eger cookie uzerinden gonderilen birseyse, cookie’nin uzerine dogru yazmamis olabilirsin, cookie’nin uzerine yazdigin kismin kodunu paylasmamissin.

Ayrica sorunun uzerine bir onerim olacak:
Bu islem icin Devise kullanmani oneririm. Devise ile basarili giris yaptiktan sonra current_user sana login olmus kullaniciyi verecektir.

Bu yazdigin kodlar uzerinden bir authentication yapman dogru degil. Dogru kullanici adi ve parola ile Token olusturup, bu token’i kullanmani tavsiye ederim. Uretilen Token ise belli bir sure sonra kullanilmayinca suresi dolmali. Ayrica isteyen kisi, kendi cookie’sine istedigi kullanici ID’sini yazip, onu kullanabilir, buda pek hos birsey degil tabiki :slight_smile:
kolay gelsin

1 Like

Burada önce giriş yapmayı denedim hocam:

Hocam api kısmını ana projemin yanına kodladığım için bunu yapmak çok zamanımı alır ama diğer projelerimde kesin kullanıcağım. Teşekkür ederim.

Hocam bunun için örnek kaynak paylaşırmısınız rica etsem.

Elimde API icin auth hizmeti veren bir taslak repo var, ancak paylasmadan once duzenlemem gerekiyor. Elimdeki repoyu daha cok su iki kaynagi kullanarak olusturmustum. Paylasmaya hazir oldugunda haber veririm :slight_smile:

1 Like

Şirket olarak geliştirdiğimiz, authentication süreçleri de dahil olmak üzere daha bir çok yapıyı içinde hazır olarak getiren open-source bir rails api boilerplate uygulamamız var, buradan ulaşabilirsin, belki işine yarayabilir :rocket:

2 Likes

@selcuktoklucu, @nejdetkadirr hocalarım çok saolun tokeni oluşturduktan sonra HTTParty.get("http://localhost:3000/api",headers:{'token':token}) şeklinde gönderince istediğim gibi giriş yapabildim emekleriniz için teşekkür ederim <3.

2 Likes

Nasıl yapıldığını merak edenler için:

Sadece yapmanız gereken tokeni get isteği ile headers içinde göndermek.