Статьи

Аутентификация пользователей через OAuth с Cordova и Ionic

Эта статья была рецензирована Верной Анчетой . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Аутентификация пользователей в службе является неотъемлемой частью мобильных приложений. Это позволяет вам гарантировать, что правильные пользователи получают доступ к вашему сервису, и позволяет персонализировать то, что вы им предлагаете. Доступно много способов аутентификации, но аутентификация пользователей через OAuth давно любима разработчиками. Это открытый стандарт для авторизации, который позволяет пользователям входить в приложения, используя свои учетные записи в других службах (таких как Facebook, Google и т. Д.), Не предоставляя приложению доступ к каким-либо учетным данным. В этом руководстве я расскажу о cordovaOAuth — расширении AngularJS, которое позволяет разработчикам мобильных приложений добавлять авторизацию Oauth в свои приложения на основе Cordova настолько просто, насколько это возможно.

Проэкт

Существует множество сторонних веб-сайтов, которые предоставляют OAuth-авторизацию, наиболее популярными из которых являются Google, Facebook, GitHub и LinkedIn. В этом руководстве я покажу вам, как реализовать авторизацию OAuth с помощью учетной записи Google с помощью $cordovaOauth . Я буду использовать Ionic Framework для создания мобильного приложения. Если вы никогда раньше не использовали Ionic, я рекомендую вам прочитать мое руководство « Создание списка корзин с помощью Ionic Framework и Firebase »

Исходный код этого руководства доступен на GitHub .

Начиная

Вам нужно будет установить Cordova ( я рекомендую QuickTip для SitePoint ) и Ionic Framework (опять же, я рекомендую QuickTip для SitePoint )

Примечание . В этом примере будет использоваться платформа Android.

Создайте приложение Ionic, используя шаблон tabs .

 ionic start myGoogleIonicApp tabs 

Перейдите в каталог проекта myGoogleIonicApp и запустите сервер.

 ionic serve 

Теперь вы должны запустить приложение по адресу http: // localhost: 8100 .

Экран приложения по умолчанию

Установка ngCordova и $ cordovaOauth

Перейдите в каталог myGoogleIonicApp и установите ngCordova с помощью bower (да, конечно, у SitePoint есть подсказка !).

 bower install ngCordova 

Включите сценарий ngCordova перед сценарием cordova на странице index.html .

 <script src="lib/ngCordova/dist/ng-cordova.js"></script> <script src="cordova.js"></script> 

Добавьте в $cordovaOauth плагин $cordovaOauth .

 cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git 

Установите ng-cordova-oauth в проекте.

 bower install ng-cordova-oauth 

Включите сценарий $ cordovaOauth после сценария ngCordova на странице index.html .

 <script src="lib/ng-cordova-oauth/dist/ng-cordova-oauth.js"></script> 

Создание пользовательского интерфейса

Перейдите к www / templates / tab-dash.html и замените существующий код следующим кодом:

 <ion-view view-title="Dashboard"> <ion-content class="padding"> <h2>Welcome to Ionic</h2> <div> <a href="" ng-click="googleLogin()"><button>Login With Google</button></a> </div> </ion-content> </ion-view> 

Добавьте платформу Android в мобильное приложение и создайте код:

 ionic platform add android ionic build android 

Запустите приложение с:

 ionic run android 

И вы должны увидеть ниже:

Google Login App

Реализация OAuth с помощью Google Login

Перейдите к www / js / app.js и введите модули ngCordova и ngCordovaOauth .

 angular.module('starter', ['ionic', 'starter.controllers', 'starter.services','ngCordova','ngCordovaOauth']) 

Внутри www / js / controllers.js добавьте функцию DashCtrl внутри DashCtrl как показано ниже:

 .controller('DashCtrl', function($scope, $cordovaOauth, $http) { $scope.googleLogin = function() { $cordovaOauth.google("app-id", ["email", "profile"]).then(function(result) { }, function(error) { }); } }) 

Разбив вышеприведенный код, вы cordovaOauth модуль DashCtrl контроллер DashCtrl и с cordovaOauth модуля cordovaOauth вы назвали Google API. Вам потребуется ключ приложения, чтобы включить Google OAuth Login, который вы можете получить из консоли разработчика Google . Зайдя на сайт, нажмите в правом нижнем углу, чтобы создать новый проект.

Создать новый проект Google Developer Console

Нажмите на вкладку учетных данных в боковом меню слева и нажмите кнопку « Создать учетные данные» .

Создать учетные данные

Выберите идентификатор клиента OAuth из меню и нажмите « Создать учетные данные» .

введите описание изображения здесь

Выберите тип приложения в качестве веб-приложения , установите URL-адрес обратного вызова и нажмите кнопку « Создать», как показано:

Установить тип приложения

После того, как вы создали клиент, он должен показать идентификатор клиента, скопировать значение и добавить его в метод DashCtrl в DashCtrl .

 $scope.googleLogin = function() { $cordovaOauth.google("YOUR GOOGLE CLIENT ID", ["email", "profile"]).then(function(result) { $scope.details = result.access_token; }, function(error) { // Error code here }); } 

Затем вам нужно привязать scope.details к пользовательскому интерфейсу, чтобы увидеть, работает ли он. Измените www / templates / tab-dash.html, как показано:

 <ion-view view-title="Dashboard"> <ion-content class="padding"> <h2>Welcome to Ionic</h2> <div> <a href="" ng-click="googleLogin()"><button>Login With Google</button></a> <span>{{details}}</span> </div> </ion-content> </ion-view> 

Сохраните изменения, создайте ионное приложение и разверните файл .apk на устройстве. Запустите приложение и нажмите, чтобы войти, используя учетную запись Google. При успешном входе в систему вы должны увидеть токен доступа, отображаемый на экране приложения.

Получение информации о пользователе с помощью токена доступа

Используя токен доступа, извлеките информацию о пользователе и отобразите ее в приложении. Внутри функции googleLogin выполните http-вызов API Google, чтобы получить информацию о пользователе.

 $http.get("https://www.googleapis.com/plus/v1/people/me", { params: { access_token: result.access_token } }) .then(function(res) { // success callback }, function(error) { alert("Error: " + error); }); 

В функции обратного вызова success свяжите пользовательскую информацию с переменной области и отобразите ее в приложении.

 $scope.details = res.data; 

Теперь измените пользовательский интерфейс, добавив класс к существующей кнопке.

 <div> <a href="" ng-click="googleLogin()"><button class="button button-block button-positive">Login With Google</button></a> </div> 

Чтобы отобразить информацию о пользователе, добавьте список, как показано ниже:

 <div ng-show="showProfile" class="list"> <a class="item item-avatar" href="#"> <img ng-src="{{details.image.url}}"> <h2>{{details.displayName}}</h2> <p>Back off, man. I'm a scientist.</p> </a> </div> 

Вы добавили showProfile области showProfile чтобы скрыть список при загрузке приложения, и установите для переменной showProfile значение true когда метод googleLogin извлекает информацию о пользователе.

 $scope.showProfile = true; 

Вот полный метод googleLogin :

 $scope.googleLogin = function(){ $cordovaOauth.google("YOUR GOOGLE CLIENT ID", ["email","profile"]).then(function(result) { $scope.showProfile = false; $http.get("https://www.googleapis.com/plus/v1/people/me", {params: {access_token: result.access_token }}) .then(function(res) { $scope.showProfile = true; $scope.details = res.data; }, function(error) { alert("Error: " + error); }); },function(error) { // error $scope.details = 'got error'; }); } 

Сохраните изменения, создайте ионное приложение и запустите его. Попробуйте войти в систему, нажав кнопку « Войти через Google» , и после успешной аутентификации в приложении должна отобразиться информация о пользователе.

Приложение OAuth с помощью плагина ngCordova

Делайте больше с плагинами ngCordova

Из этого руководства вы узнали, как добавить аутентификацию OAuth в приложение на основе Cordova и Ionic, используя плагин ngCordova, cordovaOauth. Если вы хотите узнать больше о других плагинах, которые могут помочь вашей разработке, я рекомендую прочитать официальную документацию ngCordova .

Пожалуйста, дайте мне знать ваши комментарии и вопросы ниже .