#ruby-on-rails #active-directory #single-sign-on #ruby-on-rails-6
Вопрос:
Как я могу получить зарегистрированного пользователя рекламы в своем приложении ROR.
Я пытался:
Etc.getlogin - It gives me the username of where the server is running
system(`WhoAmI`) - returns false
ENV["USERNAME"], ENV["USER"], ENV["USERID"] - Doesn't return anything
И как проверить, вошел ли Пользователь в систему или нет ?
I am using Net::LDAP for this:
a = Net::LDAP::Filter.eq("sAMAccountName", "username")
ldap.search(:filter => a)
It return me the data of the user as :
@myhash=
{:dn=>["CN=Test Windows,CN=Users,DC=example,DC=local"],
:objectclass=>["top", "person", "organizationalPerson", "user"],
:cn=>["Test Windows"],
:sn=>["Windows"],
:givenname=>["Test"],
:distinguishedname=>["CN=Test Windows,CN=Users,DC=example,DC=local"],
:instancetype=>["4"],
:whencreated=>["20211004113850.0Z"],
:whenchanged=>["20211004124559.0Z"],
:displayname=>["Test Windows"],
:usncreated=>["16489"],
:usnchanged=>["16525"],
:name=>["Test Windows"],
:objectguid=>["Some ID"],
:useraccountcontrol=>["22038"],
:badpwdcount=>["0"],
:codepage=>["0"],
:countrycode=>["0"],
:badpasswordtime=>["0"],
:lastlogoff=>["0"],
:lastlogon=>["0"],
:pwdlastset=>["1327782117765465"],
:primarygroupid=>["213"],
:objectsid=>["Some ID"],
:accountexpires=>["9223876536854775807"],
:logoncount=>["0"],
:samaccountname=>["username"],
:samaccounttype=>["93806368"],
:userprincipalname=>["username@example.local"],
:objectcategory=>["CN=Person,CN=Schema,CN=Configuration,DC=example,DC=local"],
:dscorepropagationdata=>["16010101000000.0Z"],
:mail=>["abc@abc.com"]}>]
Но вот как узнать, вошел ли пользователь в систему ?
lastlogoff и lastlogon всегда «0»
Спасибо.
Ответ №1:
API MSAL должен сообщить нам имя пользователя, которое в данный момент вошло в систему, чтобы нам не нужно было создавать отдельный файл cookie и управлять этим файлом cookie и логикой.
getAllAcounts должен предоставить нам все учетные записи. getAccount должен предоставить нам учетную запись, в которую он в данный момент вошел/активен.
Вот как вы можете проверить, входит ли пользователь в систему или нет:
cdef raw_info
@raw_info ||= access_token.get('/me').parse
Затем вы можете проверить, действителен ли токен или нет. Если он действителен, то пользователь входит в систему, в противном случае-нет.