Сегодняшняя статья будет посвящена разработке программы на Go, использующей API vk.com для авторизации и загрузки данных о пользователе.
Сейчас найти современный сервис, который бы не использовал авторизацию по OAuth практически невозможно. Существует большое количество сценариев использования этого протокола. Попробуем же написать простой клиент для работы с этой технологией на Go.
Сначала нужно создать приложение в разделе для разработчиков.
Важно указать правильные параметры проекта, для начала можно указать адрес сайта — localhost:8080 и базовый домен — localhost. Я тестировал его с помощью ngrok proxy, поэтому вводил сюда url, полученный из ngrok.
После этого остается только указать Redirect URI — адрес, куда будет произведен редирект вместе с кодом полученным в результате авторизации. Для пробы можно указать localhost:8080/auth.
Новая рубрика: кто самый умный иностранец? Коммуналка Skyeng
Панель ВК настроена. Теперь можно перейти к программированию на Go.
Всю логику программы можно разделить на 3 части:
Настройки OAuth клиента и подключение html файлов.
Отображение шаблона с кнопкой для авторизации.
Обработка авторизации, сбор сведений из API ВКонтакте, передача их в темплейт.
Для авторизации Golang я выбрал стандартный package golang.org/x/oauth2. Он легок в конфигурации и достаточно гибок, чтобы подойти для использования в реальном приложении, а также содержит ссылки на API vk, чем обычно создатели пакетов программистов не балуют.
r := gin.Default() r.LoadHTMLGlob(«templates/*») conf := ClientID: os.Getenv(«CLIENT_ID»), ClientSecret: os.Getenv(«CLIENT_SECRET»), RedirectURL: os.Getenv(«REDIRECT_URL»), Scopes: []string<>, Endpoint: vkAuth.Endpoint, >
Далее при обращении к корню необходимо отрендерить template со вставленной в него ссылкой на авторизацию.
r.GET(«/», func(c *gin.Context) < url := conf.AuthCodeURL(«state», oauth2.AccessTypeOffline) // получаем URL для редиректа на OAuth API VK и передаем его в темплейт c.HTML(http.StatusOK, «index.html», gin.H< «authUrl»: url, >) >)
Последний шаг — подгрузка данных из социальной сети после авторизации. Для этого сначала нужно получить по авторизационному коду токен для доступа к API. После обратиться к API соцсети и получить информацию о текущем юзере. Я получаю лишь некоторые из полей user API, можно получить и множество других, для этого нужно добавить необходимые в структуру vk.RequestParams.fields.
r.GET(«/auth», func(c *gin.Context) < ctx := context.Background() // получаем код от API VK из квери стринга authCode := c.Request.URL.Query()[«code»] // меняем код на access токен tok, err := conf.Exchange(ctx, authCode[0]) if err != nil < log.Fatal(err) >// создаем клиент для получения данных из API VK client, err := vk.NewClientWithOptions(vk.WithToken(tok.AccessToken)) if err != nil < log.Fatal(err) >user := getCurrentUser(client) c.HTML(http.StatusOK, «auth.html», gin.H< «user»: user, >) >) func getCurrentUser(api *vk.Client) User < var users []User api.CallMethod(«users.get», vk.RequestParams< «fields»: «photo_400_orig,city», >, type User struct < ID int64 `json:»id»` FirstName string `json:»first_name»` LastName string `json:»last_name»` Photo string `json:»photo_400_orig»` City City `json:»city»` >type City struct
Так выглядит окно приложения после авторизации.
Как скачать видео из VK? ✅Спартак поможет )
Сделано. В данном приложении не много функционала, но оно вполне подойдет в качестве рабочего примера реализации oauth gin golang или golang vk api. Его можно добавить в какой-то из ваших существующих проектов для поддержки функционала авторизации с помощью ВК на golang.
Спасибо за чтение статьи, и пишите свои мысли по поводу темы в комментарии.
- Разработка веб-сайтов
- Программирование
- Go
Источник: habr.com
Go Vk 1.0.4
Приложение отличное! Но сыроватенькое.
Добавьте:
— языки интерфейса (в частности Русский, Немецкий)
— при возврате назад (в приложение), чтобы не выходил вообще из него. Сделайте отдельную кнопку для выхода из Приложения.
— И что-то я не нашел функцию «Редактирование своего профиля»
— Ну и немножко приукрасте интерфейс.
А в общем мне понравилось, только допилите до ума!
Источник: trashbox.ru
Использование OAuth и API VK в Go
Сегодняшняя статья будет посвящена разработке программы на Go, использующей API vk.com для авторизации и загрузки данных о пользователе.
Сейчас найти современный сервис, который бы не использовал авторизацию по OAuth практически невозможно. Существует большое количество сценариев использования этого протокола. Попробуем же написать простой клиент для работы с этой технологией на Go.
Сначала нужно создать приложение в разделе для разработчиков.
Важно указать правильные параметры проекта, для начала можно указать адрес сайта — localhost:8080 и базовый домен — localhost. Я тестировал его с помощью ngrok proxy, поэтому вводил сюда url, полученный из ngrok.
После этого остается только указать Redirect URI — адрес, куда будет произведен редирект вместе с кодом полученным в результате авторизации. Для пробы можно указать localhost:8080/auth.
Панель ВК настроена. Теперь можно перейти к программированию на Go.
Всю логику программы можно разделить на 3 части:
Настройки OAuth клиента и подключение html файлов.
Отображение шаблона с кнопкой для авторизации.
Обработка авторизации, сбор сведений из API ВКонтакте, передача их в темплейт.
Для авторизации Golang я выбрал стандартный package golang.org/x/oauth2. Он легок в конфигурации и достаточно гибок, чтобы подойти для использования в реальном приложении, а также содержит ссылки на API vk, чем обычно создатели пакетов программистов не балуют.
r := gin.Default() r.LoadHTMLGlob(«templates/*») conf := ClientID: os.Getenv(«CLIENT_ID»), ClientSecret: os.Getenv(«CLIENT_SECRET»), RedirectURL: os.Getenv(«REDIRECT_URL»), Scopes: []string<>, Endpoint: vkAuth.Endpoint, >
Далее при обращении к корню необходимо отрендерить template со вставленной в него ссылкой на авторизацию.
r.GET(«/», func(c *gin.Context) < url := conf.AuthCodeurl(//h.amazingsoftworks.com/»state», oauth2.AccessTypeOffline) // получаем URL для редиректа на OAuth API VK и передаем его в темплейт c.HTML(http.StatusOK, «index.html», gin.H< «authUrl»: url, >) >)
Последний шаг — подгрузка данных из социальной сети после авторизации. Для этого сначала нужно получить по авторизационному коду токен для доступа к API. После обратиться к API соцсети и получить информацию о текущем юзере. Я получаю лишь некоторые из полей user API, можно получить и множество других, для этого нужно добавить необходимые в структуру vk.RequestParams.fields.
r.GET(«/auth», func(c *gin.Context) < ctx := context.Background() // получаем код от API VK из квери стринга authCode := c.Request.URL.Query()[«code»] // меняем код на access токен tok, err := conf.Exchange(ctx, authCode[0]) if err != nil < log.Fatal(err) >// создаем клиент для получения данных из API VK client, err := vk.NewClientWithOptions(vk.WithToken(tok.AccessToken)) if err != nil < log.Fatal(err) >user := getCurrentUser(client) c.HTML(http.StatusOK, «auth.html», gin.H< «user»: user, >) >) func getCurrentUser(api *vk.Client) User < var users []User api.CallMethod(«users.get», vk.RequestParams< «fields»: «photo_400_orig,city», >, type User struct < ID int64 `json:»id»` FirstName string `json:»first_name»` LastName string `json:»last_name»` Photo string `json:»photo_400_orig»` City City `json:»city»` >type City struct
Так выглядит окно приложения после авторизации.
Сделано. В данном приложении не много функционала, но оно вполне подойдет в качестве рабочего примера реализации oauth gin golang или golang vk api. Его можно добавить в какой-то из ваших существующих проектов для поддержки функционала авторизации с помощью ВК на golang.
Спасибо за чтение статьи, и пишите свои мысли по поводу темы в комментарии.
- Разработка веб-сайтов
- Программирование
- Go
Источник: h.amazingsoftworks.com