# ২৩.১ : পেশেন্ট অথেনটিকেশন পার্ট ১

আজকে আমরা পেশেন্ট এর অথেনটিকেশন সিস্টেম নিয়ে কাজ করবো। আমরা চাই পেশেন্ট একাউন্ট খোলার সময় যে ইমেইল দিবে সেটাই তাকে একটা ইমেইল ভেরিফিকেশন লিংক পাঠাবো। সে যখন ওই লিংক এ ক্লিক করবে তখনি তার একাউন্ট অ্যাক্টিভ হবে নাইলে হবে না।

তো সেটা করার জন্যে আমরা রেজিস্ট্রেশন serializer বানিয়ে ফেলবো। সেখানে username,first\_name,last\_name,email,password, confirm\_password নিবো সেখানে আমরা পাসওয়ার্ড আর কনফার্ম পাসওয়ার্ড কে চেক করে দেখবো যে তারা সেম কিনা। সেম না হইলে রেসপন্স দেখাবো যে পাসওয়ার্ড ম্যাচ করে নাই। আবার যদি পেশেন্ট এর দেওয়া মেইল যদি আগে আমাদের ডাটাবেজ এ থাকে তাইলে পেশেন্ট এ মেসেজ দিবো যে ইমেইল অলরেডি exists।

সো ইউজার এর ডাটা গুলা পাওয়ার জন্যে form এ যেমন ইউজ করতাম cleaned\_data সেটার বদলে এখানে ইউজ করবো validated\_data। নিচের কোড টা খেয়াল করো।\
&#x20;এই লাইন দিয়ে আমরা User মডেল এ ডাটা create করতেছি কীওয়ার্ড আর্গুমেন্ট দিয়ে।

```python
account = User(username = username, email=email, first_name = first_name, last_name = last_name)
```

```python
class RegistrationSerializer(serializers.ModelSerializer):
    confirm_password = serializers.CharField(required = True)
    class Meta:
        model = User
        fields = ['username', 'first_name', 'last_name', 'email', 'password', 'confirm_password']
    
    def save(self):
        username = self.validated_data['username']
        first_name = self.validated_data['first_name']
        last_name = self.validated_data['last_name']
        email = self.validated_data['email']
        password = self.validated_data['password']
        password2 = self.validated_data['confirm_password']
        
        if password != password2:
            raise serializers.ValidationError({'error' : "Password Doesn't Mactched"})
        if User.objects.filter(email=email).exists():
            raise serializers.ValidationError({'error' : "Email Already exists"})
        account = User(username = username, email=email, first_name = first_name, last_name = last_name)
        print(account)
        account.set_password(password)
        account.save()
        return account
```

এখন আসো এই রেজিস্ট্রেশন এর জন্যে আমরা ভিউ তৈরি করি। এখানে আসো একটা নতুন জিনিস শিখি সেটা হলো ইউজার কিন্তু রেজিষ্টেশন টাইম এ জাস্ট পোস্ট রিকোয়েস্ট করবে অর্থাৎ একটাই মাত্র রিকোয়েস্ট করবে সেজন্যে ApiView কে ইউজ করবো model ভিউ সেট এর বদলে। এই ডিটেইলস টা আমরা পার্ট ২ তে দেখবো
