2017-06-17 5 views
0

これは特定の言語フレームワークよりもプロセスロジックの問題です。認証なしでRest要求を安全に実行するにはどうしたらいいですか?

私はモバイルアプリを開発しており、ログインしなくても使用できるようにしたいと思っています(つまり、試してみて、ログインしたユーザーにプラスを提供してもらいたい)が、ポストマンやアプリ以外のプラットフォームに何らかのキーを持たせていないから、ここではどうなるのでしょうか?

秘密のユーザー名で基本的な認証を考えています。ゲストのパスワード、または何らかのトークンですが、私は全く新しいので、正しいアプローチであるかどうかわかりません。認証とアクセス許可Django Restフレームワークチュートリアルで解決策を見つけられませんでした

答えて

1

私はDjangoを自分自身で学習しており、より高度なトピックを取得しています。あなたが行うことができることは、あなたのpermissions.pyファイルにこれのための関数を作成することです。そのよう:パーミッションクラスを扱うとき

from rest_framework import permissions 

class specialMobileUserPermissions(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     if request.method in request.SAFE_METHODS: 
      return True 

     if request.user.id == whatever your mobile users id is: 
      return false 

     return obj.id == request.user.id # if the user is a subscribed user and they are logged in return true 

     return false # because we need a way out if none of the above works 

のでpermissions.SAFE_PERMISSIONSは非破壊ある権限のリストです。したがって、最初のif文がGET、HEAD、または他の非データ変更メソッドかどうかを尋ねます。そうならtrueを返します。

2番目のifステートメントは、要求を行っているユーザーのユーザーIDをチェックします。そのユーザーIDがモバイルトレイルユーザーに設定したユーザーIDと等しい場合、このクラスが使用されているすべてのアクセス許可を拒否するfalseを返します。

あなたはあなたが必要なものがすべて、ダウン輸入にすべての方法である必要があり、余分な機能を、必要な場合を除き

from . import permissions # your permissions.py file 

class FooViewSet(viewsets.ViewSet): 
    permission_classes = (permissions.specialMobileUserPermissions,) 

以下のようなpermissions_classes変数を追加する必要がありますあなたのビューセットで

。私は助けてくれることを願っています。

+0

ありがとうございます。私が理解しているように、一種のモバイルIDを作成し、ログに記録されていないユーザーにSAFE_METHODSを使用させる必要があります。しかし、投稿をすることができればそれを安全にするために一種の秘密の暗号化されたモバイルIDを提供するか、まったくそれをすることをお勧めしませんか? –

+0

idがユーザデータベースのプライマリキーであるため、モバイルトライアルユーザを作成してプライマリキー(そのユーザのID)を取得し、2番目のif文を に変更したい場合はobj.id = = id: –

関連する問題