Devret + Doorkeeper + RocketPants ile Roque'da AngularJS'de ve arka uçta bir ön uçurum var. Şimdilik CORS'yi düzgün şekilde çalıştırıyorum, API'm json yanıtlarını başarılı bir şekilde alabilirim (eğer koruma görevini kapatırsam). Ama şimdi kullanıcıyı uygulamaya çalışıyorum şifre kimlik akış:Kapıcı/oauth/token - boş yanıt
kapıcısının üzerinde: angularjs Açık
resource_owner_from_credentials do |routes|
request.params[:user] = {:email => request.params[:username], :password => request.params[:password]}
request.env["devise.allow_params_authentication"] = true
request.env["warden"].authenticate!(:scope => :user)
end
(src: nils-blum):
var payload = "username="+username+"&password="+password+"&" +
"client_id="+client_id+"&client_secret="+client_secret+
"&grant_type=password"
$http({method: 'POST',
url: scope.booksh_server + '/oauth/token',
data: payload,
headers: {'Content-Type':'application/x-www-form-urlencoded'}
}
).success(function (data) {
tokenHandler.set(data.access_token);
scope.$broadcast('event:authenticated');
});
Not: Nils yaklaşımı nesne olarak yükü kullanır Params ile, bir dize değil. Benim durumumda, FORM paramları ile değil, yük ile POST verir ve bu nedenle çalışmaz.
Yanlış kullanıcı/şifre girmek
, raylar oturum diyor ki: iptal olarakStarted POST "/oauth/token" for 127.0.0.1 at 2013-11-22 15:21:08 +0400
Doorkeeper::Application Load (0.5ms) SELECT "oauth_applications".* FROM "oauth_applications" WHERE "oauth_applications"."uid" = '981d6d654f5e709b2ca3437401c993a6d09cc91cc3fb16b8e2b3191e6421029c' AND "oauth_applications"."secret" = 'f92c4ec969525352bd03ec1eb810a9952cd0814d37ce5b2b02e8a928b2561e10' ORDER BY "oauth_applications"."id" ASC LIMIT 1
User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'undefined' ORDER BY "users"."id" ASC LIMIT 1
Krom dev araçlar bu isteği gösterirler. Firebug, 302 Found durumuyla boş yanıt gösteriyor. REST App numaralı kromdan aynı POST'u gerçekleştirdiğimde, UPD: sunucusu aynı şeyi yapar ve 302 Bulundu ve sonra da sign_in sayfası için yeniden yönlendirilir. Doğru kullanıcı/şifre girmek durumunda
Üstelik, firefox 200 OK ile boş tepkisi, DİNLENME erişim belirteci ile uygun json alır gösterir ve krom iptal tepkisini gösterir ve CORS hata atıyor:
XMLHttpRequest cannot load http://0.0.0.0:3000/oauth/token. Origin http://0.0.0.0:9000 is not allowed by Access-Control-Allow-Origin.
Sunucu günlüğü:
Started POST "/oauth/token" for 127.0.0.1 at 2013-11-22 15:33:22 +0400
Doorkeeper::Application Load (0.5ms) SELECT "oauth_applications".* FROM "oauth_applications" WHERE "oauth_applications"."uid" = '981d6d654f5e709b2ca3437401c993a6d09cc91cc3fb16b8e2b3191e6421029c' AND "oauth_applications"."secret" = 'f92c4ec969525352bd03ec1eb810a9952cd0814d37ce5b2b02e8a928b2561e10' ORDER BY "oauth_applications"."id" ASC LIMIT 1
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' ORDER BY "users"."id" ASC LIMIT 1
(0.2ms) BEGIN
SQL (0.4ms) UPDATE "users" SET "last_sign_in_at" = $1, "current_sign_in_at" = $2, "sign_in_count" = $3, "remember_token" = $4, "updated_at" = $5 WHERE "users"."id" = 1 [["last_sign_in_at", Fri, 22 Nov 2013 11:32:49 UTC +00:00], ["current_sign_in_at", Fri, 22 Nov 2013 11:33:23 UTC +00:00], ["sign_in_count", 24], ["remember_token", "N5sRI6vE7B6vRNUlih3G2Q"], ["updated_at", Fri, 22 Nov 2013 11:33:23 UTC +00:00]]
(17.5ms) COMMIT
(1.6ms) BEGIN
Doorkeeper::AccessToken Exists (0.3ms) SELECT 1 AS one FROM "oauth_access_tokens" WHERE "oauth_access_tokens"."token" = '72dd81fd85b638fb14f9d081193b1eda0e58f85d6820718ab635fe195c36a689' LIMIT 1
SQL (0.3ms) INSERT INTO "oauth_access_tokens" ("application_id", "created_at", "expires_in", "resource_owner_id", "scopes", "token") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["application_id", 1], ["created_at", Fri, 22 Nov 2013 11:33:23 UTC +00:00], ["expires_in", 7200], ["resource_owner_id", 1], ["scopes", ""], ["token", "72dd81fd85b638fb14f9d081193b1eda0e58f85d6820718ab635fe195c36a689"]]
(28.1ms) COMMIT
Bu işi nasıl yapabilirim? E-posta/şifre doğruysa, kimlik doğrulamayı işlemek ve access_token ile yanıt vermek için POST/oauth/token'a ihtiyacım var. Herhangi bir yardım için minnettarım, bu noktada sıkışmış olmaktan yoruldum)
Büyük soru! Ne yazık ki, bir cevabın bulunmasının büyük bir zaman harcamasına ihtiyaç duyacağı çok sayıda mücevher var. – Chandranshu
* Nils'in yaklaşımı, dize değil, param olan nesne olarak yükü kullanır. Benim durumumda, FORM paramları ile değil, yük ile POST verir ve bu nedenle çalışmaz. * - Bu noktayı anlamıyorum. Kullanıcı adı ve parola, POST isteğinin yük veri dosyasında bulunur; bu, bunları sunucuda ayıklayabileceğiniz anlamına gelir. Neden durumun farklı olduğunu söylüyorsun? – Chandranshu
* Ve uygun json nesnesini access_token ile döndürür. Anlayabildiğim gibi, istekle birlikte verilen '_doorkeeper-provider_session' çerezinden dolayı, ancak onu nerede bulabileceğimi bulamıyorum. * - Tek bir test için tarayıcınızın çerez yöneticisinde yok edebilir ve görebilirsiniz. eğer hala çalışıyorsa. – Chandranshu