Вход/регистрация через ВКонтакте(vk.com)

Для использования регистрации ВКонтакте:

  • Войдите ВКонтакте под своей учётной записью.
  • Откройте страницу Мои приложения (https://vk.com/apps?act=manage) и нажмите на кнопку Создать.

Заполняем название сайта, ссылку и домен. 

После подтверждения создания приложения откроется страница с информацией о приложении.

В настройках приложения получаем ID приложения, секретный ключ (для открытия требует код из смс).

Доверенный redirect URI - это пути, на которые ВКонтакте разрешено перенаправлять пользователя в процессе авторизации. URI передается сети в процессе авторизации с вашего сайта. Эти пути, как правило, URL авторизации и redirect URI — одни и те же, например https://falconspace.ru/api/action/...

Далее можем получить непосредственно код для вставки в разметку страницы

https://dev.vk.com/widgets/auth - виджет авторизации на ВК.

Данный виджет добавляем на страницу сайта (важно, чтобы домен сайта был прописан в настройках приложения ВК). 



В качестве ссылки для авторизации берем ссылку на метод входящего API Falcon Space 

В качестве параметров данный метод получает:

  • идентификатор пользователя
  • имя
  • фамилия
  • URL фотографии профиля пользователя шириной 200px
  • URL фотографии профиля пользователя шириной 50px
  • hash-код для проверки авторизации как md5 от app_id+user_id+secret_key

Пример SQL-кода нашего метода API:

CREATE PROCEDURE [dbo].[api_vk_vkauth100]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(256)
as
begin
	  DECLARE @appID 	NVARCHAR(128) = N'_____________appID_________________'
  DECLARE @secretKey NVARCHAR(128) = N'___________SECRET KEY________________'
  -- идентификатор пользователя
  DECLARE @vkUserID  NVARCHAR(128) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'uid'   	),N'') 
  -- имя
  DECLARE @firstName NVARCHAR(128) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'first_name'),N'') 
  -- фамилия 
  DECLARE @lastName  NVARCHAR(128) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'last_name' ),N'')
  -- URL фотографии профиля пользователя шириной 200px
  DECLARE @photo 	NVARCHAR(128) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'photo' 	),N'')
  -- URL фотографии профиля пользователя шириной 50px
  DECLARE @photoMin  NVARCHAR(128) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'photo_rec' ),N'')
  DECLARE @hash  	NVARCHAR(512) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'hash'  	),N'')
  DECLARE @input 	NVARCHAR(MAX) = ISNULL((SELECT TOP 1 Value2 FROM @parameters WHERE LOWER([Key]) = N'inputstream'),N'')

  -- @hash - Для проверки авторизации, сравнив его с md5 подписью от app_id+user_id+secret_key, например md5(667481942537fTanpCrNSeuGPbA4ENCo)
  SET @hash = LOWER(@hash);
  DECLARE @myHash NVARCHAR(512) = LOWER(dbo.as_md5(@appID + @vkUserID + @secretKey));
  IF @vkUserID = N'' BEGIN
	SELECT 0 [Result], N'Идентификатор пользователя ВКонтакте не может быть равным нулю' Msg
	RETURN
  END
  IF @hash <> @myHash BEGIN
	SELECT 0 [Result], N'Не совпали контрольные суммы' Msg
	RETURN
  END
  DECLARE @user NVARCHAR(256) = N'vk' + @vkUserID;
  DECLARE @msg NVARCHAR(MAX) = N''
 
 declare @userExist bit = 0
  IF EXISTS(SELECT TOP 1 id FROM as_users WHERE username = @user)  BEGIN
  	set @userExist = 1	
  END
  

  -- SELECT 1 - вывод метаданных о результате операции метода API
  SELECT @msg Msg, 1 [Result], 0 errorCode, N'/cabinet' RedirectUrl
  -- SELECT 2 -  вывод самих данных в API (в случае проблем проверьте что этот запрос приходит непустой)
  SELECT 2
  
    
  -- SELECT 3 Вызов внешних действий
  
 if(@userExist = 1) begin 
 	SELECT N'authcookie' [type], @user username, 1 persist
 end else begin    
	select 'user.createuser' type, @user username, convert(nvarchar(36), newid()) password, @vkUserID name, 
    	convert(nvarchar(36), newid())+ '@mail.ru' email, '' phone,  
    	cast(1 as bit) isApproved, 'client' roles, 'afterCreateClient' spCallback,  1 hideAuth
 end 
   

end
	

В процедуре используем appID и секретный ключ для проверки запросов через хеш MD5. 

Если запрос валидный, то проверяем наличие пользователя. Если он есть то авторизуем его. Если нету, то создаем его (в данном случае с ролью client).

В процедуре sql callback для создания пользователя создаем дополнительные объекты, а также прозрачно авторизуем пользователя. 

CREATE PROCEDURE [dbo].[outer_afterCreateClient]
	@parameters ExtendedDictionaryParameter readonly,
	@data nvarchar(128) = '',
	@username nvarchar(128) = ''
AS
BEGIN
	declare @user nvarchar(256),  @password nvarchar(256), @name nvarchar(128), @email nvarchar(128), @phone nvarchar(128)
		@result bit, @msg nvarchar(max), @hideAuth nvarchar(128)
	select @user =Value2 from @parameters where [Key]= 'username'
	select @password =Value2 from @parameters where [Key]= 'password'
	select @name =Value2 from @parameters where [Key]= 'name'
	select @email =Value2 from @parameters where [Key]= 'email'
	select @phone =Value2 from @parameters where [Key]= 'phone'
	
	
    select @hideAuth =Value2 from @parameters where [Key]= 'hideAuth'   
    
	
	
	select @result = try_cast(Value2 as bit) from @parameters where [Key]= 'result'
	select @msg =Value2 from @parameters where [Key]= 'msg'
	
	if(@result = 0 ) begin 
		select @result Result, @msg Msg
		return 
	end 

	if(isnull(@user, '')='') begin 
		select 0 Result, 'Empty username' Msg
		return 
	end 
        -- создаем здесь объекты для пользователя ... .....

	-- SELECT 1 ReesultModel
	select 1 Result, @msgText Msg
	
        declare @outers table(type nvarchar(max),
                              username  nvarchar(max), persist int)
	-- SELECT 2 Вызов внешнего действия        
        if(@hideAuth='1') begin 
        	insert into @outers
			select 'authcookie' type, @user, 1
    	end 
    	select * from @outers	
END

В итоге пользователь может через подтверждение в виджете зайти в личный кабинет. Если у него не было еще пользователя, то он будет создан (на основе его VK ID). 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы

Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK