2017-08-21 26 views
0

私の{N} -Appにユーザー用のログインシステムを構築したいと思います。正常にログインすると、私は要求を実行する必要があるトークンを受け取ります。現時点では、私はapplication-settingsモジュール経由でこれを保管しています。ユーザーがログインしているときにUIを「ログイン画面」と「個人情報画面」に切り替える必要があります。ユーザーはログインしていないときにアプリケーションの特定の機能を使用することができます。サイドバー。NativeScriptアプリケーションでユーザートークンを保存する最も良い方法

ルートが別のコンポーネントに変更されている必要があります(アプリケーションを開くたびにチェックする必要があります)か、ユーザートークンが保存されているかどうかによってコンポーネントのオーバーレイを変更できますない。これを行う可能性はありますか? (私の.ts-ファイルのコンポーネント注釈で特定のものを定義しなければならないので、最も簡単な方法はこれを操作することです)。

私は経路の中で一度定義されたタブの名前を持っています、そして、私の経路指定ディレクトリの中で一度定義されているので、私はとにかく経路を変更しなければならないと思います。

私の考え:(もちろん)動作しませんでした

//router definition 
path: "Main", component: MainPage, children: [ 
    (appSettings.getBoolean("isLoggedIn") == true) ? 
     {path: "Login", component: LoginPage} : 
     {path: "My Account", component: LoginPage} 
    ] 

。その他のアプローチは?

編集:

私は非常によく私の問題を説明していない可能性があります:私はサイドバーを持つアプリケーションを持っています。そのサイドバーには「ログイン」ラベルがあります。ユーザーがログインしたいときはいつでも、彼はそれを打つだけで彼の資格情報を入力することができます。ユーザーがログインしているときは、この「ログイン」ラベルが消えて、代わりに「アカウント」のように何かして自分の個人情報を見ることができます。彼はアプリケーションの新しいページにアクセスする権限を持っていません。だから私が望むのは、その特定のページのサイドバー入力とオーバーレイを変更することだけです。

答えて

2

角度のauth guardを使用して同様の結果が得られました。

@Injectable() 

export class AuthGuard implements CanActivate { 

    auth: any = {}; 

    constructor(private authService: AuthService, private router: Router) { 

    } 

    canActivate() { 
     if (/*user is logged in*/) { 
      this.router.navigate(['/dashboard']); 
      return true; 
     } 
     else { 
      this.router.navigate(['/login']); 
     } 
     return false; 
    } 
} 

そして、次のようにルータの設定にあなたがそれを使用します:EDIT AFTER

const routes: Routes = [ 
    { path: '', redirectTo: '/login', pathMatch: 'full' }, 
    { path: AppKeys.Paths.login, loadChildren:() => require(AppKeys.Paths.loginModule)['LoginModule'], canLoad: [AuthGuard]} 
]; 

を あなたはhere

基本的にはこのようなものでAUTHガードを設定する素敵な答えを見つけることができます

あなたの問題を正しく理解していれば、何かする必要がありますはるかに簡単です。 基本的にあなたが...このような何かrouterLinkディレクティブとリストビュー項目で、いくつかの条件付きテキストを使用することができます:あなたはどのような値で初期化されisLoggedin変数がapp settingsに保存されている必要がありますコンポーネントで

<Button text="{{ isLoggedin ? 'login' : 'personal info' }}" [nsRouterLink]="[isLoggedin? '/login' : '/personalinfo' ]"></Button> 

を。

私は、コードをテストしていない、あなたはそれに適応する必要があります

(ないボタンが、リストビューアイテムを、パスなど)が、これはその背後にある一般的な考えです:)

+0

そのためのおかげで、私は見ていますそれは:) –

+0

私は実際にそのモジュールがどのように働くのか分からない。特定の経路を有効にするためのものであり(正しく理解していれば)、これを使用することができます。特定の権限を持つユーザーの場合つまり、「ログイン」/「ログアウト」モジュールとしても機能していますか?私はあなたがリダイレクトなどのようなものを行うことができることを知っていましたが、ログインページを非表示にして、代わりに「連絡先」ページを表示できるかどうかはわかりませんでした。私のためにこれを明確にすることができますか? –

+0

@Rüdiger私は自分の答えを編集しました。 –

関連する問題