İpucu

Google Hesabı İle Sitenize Giriş Yapılabilmesini Sağlama

Bazı web sitelerinde Google ile giriş yap, Facebook ile giriş yap gibi düğmeler görebilirsiniz. Bu siteler Google abonelerini kolay bir şekilde giriş yapmasıını sağlayarak kullanıcıları kayıt yükünden kurtarmaktadır.
Google bu işlevi gerçekleştirmek için yarattığı ürüne Google Sign-In adı verilmektedir ve bu ürün OAuth 2.0 standartlarına uygun geliştirilmiştir.
İlk iş olarak Client ID yaratılması gerekir. Bu client id ile sign-in API'leri çağrılabilecektir. Client ID alınabilmesi için de Google API Console projesi yaratılması gerekir. Bunun için console.developers.google.com/apis/dashboard sayfasında OAuth İzin ekranı bölümü kullanılabilir. Burada bir üye giriş yaptığında geriye neler döndürüleceği gibi bilgiler seçilebilir. Privacy Policy bilgileri içeren bir bağlantı adresi de eklenmesi gerekiyor. Proje yaratılıp Client Id alındıktan sonra ikinci aşamaya geçilebilir.
İkinci işlem olarak Google ile Giriş yap düğmesi sayfanıza eklenmesi gerekir. Aşağıdaki bölüm header bölümüne eklenebilir:
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer">
	{lang:'tr'}
</script>
Ardından düğmenin kendisi eklenir
<div class="g-signin2" data-onsuccess="onSignIn"></div>
Eğer üye zaten loginli ise işlemi başarılı olur ver onSignIn yöntemi çağrılır. Kullanıcı bu durumda giriş ekranını görmesine dahi gerek yoktur. Eğer Google'a daha önce giriş yapmadıysa Google giriş ekranı açılır.
<script type="text/javascript">
function onSignIn(googleUser) {
  var id_token = googleUser.getAuthResponse().id_token;
  var xhr = new XMLHttpRequest();
  xhr.open('POST', 
	'#{request.contextPath}/GoogleTokenSigninServlet');
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.onload = function() {
	  if(xhr.status==200){
		location.href="/";
	  }
  };
  xhr.send('idtoken=' + id_token);
}
</script>
Eğer işlem başarılı olursa GoogleTokenSigninServlet adında bir Servlet çağrılır. Bu Servlet kullanıcının mail adresi vb.. bilgilerini alan ve giriş yapan, eğer üye değilse kayıt yapan servlettir.
@WebServlet("/GoogleTokenSigninServlet")
public class GoogleTokenSigninServlet extends HttpServlet {
	private String CLIENT_ID = "1047450979973-rqpakuc4ekv7a79enedssgtpahcjo8ds.apps.googleusercontent.com";
	public GoogleTokenSigninServlet() {
		super();
	}
	protected void doGet(HttpServletRequest request, 
		HttpServletResponse response)
			throws ServletException, IOException {
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String idtoken = request.getParameter("idtoken");
		
		if(idtoken==null || idtoken.isEmpty()){
			System.out.println("Invalid google ID token.");
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
		GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new JacksonFactory())
			    .setAudience(Collections.singletonList(CLIENT_ID))
			    .build();
		GoogleIdToken idToken=null;
		try {
			idToken = verifier.verify(idtoken);
		} catch (GeneralSecurityException e) {
			e.printStackTrace();
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
		
		if (idToken != null) {
			Payload payload = idToken.getPayload();
			String userId = payload.getSubject();
			System.out.println("User ID: " + userId);
			String email = payload.getEmail();
			boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
			
			String name = (String) payload.get("name");
			System.out.println("email:" + email  + " emailVerified:" + emailVerified+" name:"+name);
			
			// üye mi değil mi kontrol ediliyor email adresine gore.
			// üye değilse kayıt ediliyor. Üye ise sadece login yapılıyor
				
			response.setStatus(HttpServletResponse.SC_OK);
			return;
		} else {
			System.out.println("Invalid ID token.");
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
	}
}
zafer.teker , 07.05.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir