Я пытаюсь создать поток аутентификации, используя Auth Code Grant
, где я добавил необходимую стратегию omniauth для Docusign для создания /auth/docusign
маршрутов только в приложении Rails API.
Вот шаги, которые я выполнил. Выдаю запрос на маршрут от клиента VueJS. window.open("http://localhost:4000/auth/docusign", "targetWindow", "width=350,height=250")
После того, как пользователь вводит учетные данные и при успешном входе в систему, я вызываю обратный вызов:
class SessionsController < Devise::SessionsController
def docusign
internal_destroy
@success = false
userinfo = request.env['omniauth.auth']
request_info = request.env['omniauth.params']
if userinfo
info = userinfo.info
cred = userinfo.credentials
user = User.find_by(email: info['email']) || User.find_by(id: session[:user_id])
if user
organization = user.organization
organization.organization_providers.where(provider_name: 'Docusign').destroy_all
OrganizationProvider.create(email: info['email'], token_expires_at: Time.at(cred['expires_at']), token_expires_at: Time.now, provider_name: 'Docusign', organization_id: organization.id, token: cred.token)
@success = true
end
end
render 'sessions/docusign'
end
end
Я хотел бы передать некоторые параметры (к которым я обращаюсь в обратном вызове как request.env['omniauth.params']
) для выполнения некоторых бэкэнд-задач в методе. Когда я пытаюсь window.open("http://localhost:4000/auth/docusign?email='"+email+"'", "targetWindow", "width=350,height=250")
, он говорит, что URL-адрес не соответствует ни одному URL-адресу перенаправления
Я также пытался передать redirect_to('/auth/docusign', query: query)
, но при этом он не открывается в браузере из-за CORS.
Я также пытаюсь установить его в сеансе cook ie, но, поскольку это сервер только API, я все еще работаю над настройкой cookie store
.
Вопрос Как лучше всего этого добиться? Чтобы передать некоторые параметры в обратном вызове и получить их.
Затем поток выполнения продолжается на сервере Rails, и окно обслуживает страницу с соответствующим ответом в соответствии со статусом аутентификации. Однако в это время окно клиента, запустившее запрос, не знает о результате аутентификации.
Вопрос Как я могу сообщить клиенту VueJS, что процесс аутентификации завершен?
Вопрос Правильно ли я выполняю описанный выше поток или есть какие-то лучшие способы добиться того же?
Заранее спасибо