احراز هویت در firebase با شناسه های مجازی
در سری مقالات آموزش Firebase, قصد داریم تا با استفاده از account های شبکه های مجازی مانند Google با استفاده از سرویس Firebase, یک کاربر را احراز هویت کنیم. در مقاله قبلی اصول Authenticate را بررسی کردیم. برای درک مناسب تر این مقاله بهتر است مقاله قبلی را مطالعه کرده باشید.
حتما برای شما هم پیش آمده است که وقتی به برنامه ای وارد میشوید, علاوه بر اینکه میتوانید از طریق رایانامه و رمز عبور ثبت نام کنید, button هایی برای احراز هویت از طریق شناسه هایی که در شبکه های مجازی دارید, در نظر گرفته شده است تا مراحل ثبت نام را برای شما راحت تر کند. در این مقاله نیز سعی داریم تا با استفاده از Google و یک custom server که برای شما token های مربوط به کاربرانتان را ایجاد میکند, یک کاربر را احراز هویت و یا ثبت نام کنیم. در ابتدا باید توجه داشته باشید که روش ورود را باید در Sign in method در قسمت Authenticate فعال کنید. ( در Firebase Console )
برای استفاده از Google باید ابتدا dependency لازم را به gradle اضافه کنیم :
compile 'com.google.android.gms:play-services-auth:10.0.1'
سپس یک متد با نام initGoogle ایجاد میکنیم و تنظیمات مربوط به Google را در آن قرار میدهیم :
@BindString(R.string.web_client) String oAuthID; private GoogleApiClient mGoogleApiClient; private void initGoogle() { GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(oAuthID) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, signInOptions) .build(); }
در اینجا به یک OAuth 2.0 client ID نیاز داریم و مقدار آنرا در oAuthId قرار دادیم. برای دریافت مقدار client id باید به صفحه Credentials بروید و از قسمت OAuth 2.0 client ID مقدار client id مربوط به Web client (auto created by Google Service) را دریافت کنید.
سپس یک Button طراحی میکنیم که در صورت کلیک با استفاده از Google احراز هویت کند :
private int googleSignin = 10; @OnClick(R.id.google) public void googleSignIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, googleSignin); }
در اینجا یک Dialog برای شما باز میشود و میتوانید google account خود را انتخاب کنید. سپس نیاز دارید تا نتیجه intent را دریافت کنید.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == googleSignin) { GoogleSignInResult inResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (inResult.isSuccess()) { googleSignIn(inResult.getSignInAccount()); } } } private void googleSignIn(GoogleSignInAccount signInAccount) { AuthCredential authCredential = GoogleAuthProvider.getCredential(signInAccount.getIdToken(), null); if (firebaseAuth.signInWithCredential(authCredential).isSuccessful()) { System.out.println("Signed in with google"); } }
در اینجا نتیجه از intent گرفته میشود و با استفاده از FirebaseAuth وارد میشود.
در صورتی که بخواهیم sign out کنیم باید به این صورت عمل کنیم:
@OnClick(R.id.signOut) public void signOut() { firebaseAuth.signOut(); Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { System.out.println("log out"); } } }); }
در صورتی که بخواهید از یک custom server استفاده کنید باید در ازای گرفتن یکسری اطلاعات از کاربر ( برای مثال نام کاربری و رمز عبور ) یک token ایجاد کنید وبه برنامه ارسال کنید . فرض میکنیم این متد چنین کاری را برای ما انجام میدهد :
private String getToken(String username, String password) { return sendToServer(username, password); }
و سپس باید با استفاده از این token کاربر را از طریق سرویس Firebase احراز هویت کنیم :
private void signInCustomServer(String username, String password) { if (firebaseAuth.signInWithCustomToken(getToken(username, password)).isSuccessful()) { System.out.println("Sign in"); } }
اگر کاربر شما وارد شده است و میخواهد به باقی account های خود نیز متصل شود باید AuthCredential مربوطه را دریافت کرده و به این صورت عمل کنید :
private void linkToMyAccount(AuthCredential authCredential) { if (firebaseAuth.getCurrentUser().linkWithCredential(authCredential).isSuccessful()) { System.out.println("linked"); } }
و برای گرفتن AuthCredential نیز میتوانید چنین بنویسید. اگر میخواهید رایانامه و رمز عبور را متصل کنید :
AuthCredential mail = EmailAuthProvider.getCredential(mail, password);
اگر میخواهید Google را متصل کنید :
AuthCredential mail = GoogleAuthProvider.getCredential(googleOAuthID, null);
در این مقاله سعی بر این شد که با استفاده از popular federated identity احراز هویت کاربران را انجام دهیم. در مقاله بعدی Analytics در Firebase را مورد بررسی قرار خواهیم داد.
سری مقالات آموزش Firebase همچنان ادامه دارد.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
آموزش Gradle – اهمیت Project Automation
درک مفهوم کدنویسی تمیز در اندروید
5 هک ساده برای کاهش سایز فایل APK
آشنایی با RecyclerView در اندروید
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
با سلام هنوز هم سوریس Firebase از طرف گوگل برای ما محدود هست یا محدودیتش رو برداشته اند؟
با سلام . بله متاسفانه هنوز تحریم هست.