Вход/регистрация через ВКонтакте(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

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK