GeneXus Access Manager(GAM) #3 GAM API（ログイン／ユーザ情報取得／ログアウト）

[＃１](https://qiita.com/sgtrducky/items/87beb336b0e8936692bf)、[＃２](https://qiita.com/sgtrducky/items/076a0c19794af6b0b3c5)に続きまして、GAMの検証を。GAM APIの基本として、ログイン～ユーザ情報取得～ログアウトまで。

## ログイン
- [GAM の Login メソッド(wiki.genexus.jp)](http://wiki.genexus.jp/hwiki.aspx?GAM+%E3%81%AE+Login+%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89,)
- [GAM Login Method(wiki.genexus.com)](https://wiki.genexus.com/commwiki/servlet/wiki?19269,GAM+Login+Method)


ドキュメントに記載の通り、GAMRepositoryオブジェクトのLoginメソッドを以下のパラメータ渡して呼び出します。
- UserName : GAMUserIdentification Type
- Password : GAMPassword Type
　ドキュメント記載のGAMDescriptionMedium Type　と本検証の環境（17u3）にインポートされるGAMExampleLoginでのデータタイプに差異あり？
- AdditionalParameters : GAMLoginAddittionalParameters Type 
- Errors : GAMError Type Collection

GAMLoginAddittionalParameters の AuthenticationTypeName で認証タイプを指定するが、LOCAL認証タイプの場合は不要とのこと。
![GAM01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168717/02762cc3-d0ef-de58-4c8f-e0882a67c7b3.jpeg)

```
Event Enter
	&LoginOk = GAMRepository.Login(&UserName, &Password, &AdditionalParameters, &Errors)
	If &LoginOk
		WpAuth01.Call()
	Else
		For &Error In &Errors
			Msg(Format(!"%1 (GAM%2)", &Error.Message, &Error.Code))
		EndFor
	EndIf
Endevent
```
以上、ログイン画面で認証し、ログイン後初期画面オブジェクト（WpAuth01）をCallまで。
認証OK後の画面遷移についてGAMExampleLoginにおいては以下のように。

```
&URL = GAMRepository.GetLastErrorsURL()
If &URL.IsEmpty()
	GAMHome()
Else
	Link(&URL)
Endif
```

GAMRepository.GetLastErrorsURL()は、画面直撃⇒認証NG⇒ログイン画面⇒認証OK⇒元の画面パターンか。GAMHome()については別途確認・記載予定。



## ユーザ情報参照
- [GAM API: GAM ユーザーを参照する方法(wiki.genexus.jp)](http://wiki.genexus.jp/hwiki.aspx?GAM+API%3A+GAM+%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95,)
- [GAM API: How to reference GAM users(wiki.genexus.com)](https://wiki.genexus.com/commwiki/servlet/wiki?16534,GAM+API%3A+How+to+reference+GAM+users)

ドキュメントに複数方法が記載されていますが、
> The following is a static method. The static methods refer to the currently logged in user:

って

> 次に示すのは静的メソッドです。静的メソッドは、現在ログインしているユーザーを参照します:

でよいのですかね。動きは別途確認します。
とりあえず、２つめの

> もう 1 つは、アクティブなセッションを使用する方法です:

を利用して確認を進めます。

![GAM02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168717/fad7ff81-9c6a-b7b5-4406-4427aa80c989.jpeg)
ドキュメント記載の通り、セッション取得⇒ユーザ取得。

```
Event Start
	&GAMSession = GAMSession.Get(&Errors)
	&User = &GAMSession.User
EndEvent
```

![GAM03.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168717/09659b5e-f3c6-ad8f-2264-642c3a148ef2.jpeg)

## ログアウト
- [GAM API を使用した認証とログアウトの実装(wiki.genexus.jp)](http://wiki.genexus.jp/hwiki.aspx?GAM+API+%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E8%AA%8D%E8%A8%BC%E3%81%A8%E3%83%AD%E3%82%B0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E5%AE%9F%E8%A3%85,)
- [Implementing Authentication and Logout Using the GAM API(wiki.genexus.com)](https://wiki.genexus.com/commwiki/servlet/wiki?15938,Implementing+Authentication+and+Logout+Using+the+GAM+API)

![GAM04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168717/a9a78f98-e26e-d86c-5cef-d7f391519a17.jpeg)

```
Event 'Logout'
	GAMRepository.Logout(&Errors)
	GAMSampleLoginSimple01.Call()
Endevent
```

次回、その他API、ローカル以外のAuthentication Type確認、はたまたいったんAuthorization方面にシフト等検討します。

2021年07月12日　初版